美文网首页
Python学习基础知识之 面向对象的简单基础,常见操作(单继承

Python学习基础知识之 面向对象的简单基础,常见操作(单继承

作者: 嘤嘤嘤999 | 来源:发表于2020-09-16 07:51 被阅读0次

    目录

    一、继承介绍以及单继承

    1.1程序中的继承(extend)

    1.2单继承

    1.3多继承

    二、子类重写父类的同名属性和方法

    三、super()的调用


    一、继承介绍以及单继承

    1.1程序中的继承(extend)

    在程序中,继承描述的是多个类之间的所属关系。

    如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。

    那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。

    # 父类class A(object):#括号里的object是所有类的父类,金字塔的存在顶尖唯一    def __init__(self):#init是初始化方法        self.num = 10     def print_num(self):        print(self.num + 10)# 子类class B(A):#括号里写什么就继承什么,里面是A:所以是继承A类    pass  b = B()print(b.num) b.print_num()
    

    1.2单继承

    单继承:子类只能继承一个父类

    class Animal():    def __init__(self):        self.animalType = "动物种类"     def isAnimal(self):        print("这个动物是%s"%self.animalType) class Cat(Animal):#括号里写什么就继承什么    pass a = Cat()#定义一个a接收子类Cat()print(a.animalType)#子类调用父类的属性a.isAnimal()#子类调用父类的方法
    

    运行结果:

    image

    **注意: **

    虽然子类没有定义__init__方法初始化属性,也没有定义实例方法,但是父类有。所以只要创建子类的对象,就默认执行了那个继承过来的__init__方法

    • 子类在继承的时候,在定义类时,小括号()中为父类的名字
    • 父类的属性、方法,会被继承给子类(非私有的才可以!!!!)

    1.3多继承

    **多继承:子类继承多个父类 **

    class Animal():#父类Animal()    def __init__(self):#init默认的属性        self.animalType = "动物种类111111"     def isAnimal(self):        print("这个动物是%s111111"%self.animalType) class Animal2():#父类Animal2()    def __init__(self):#init默认的属性        self.animalType = "动物种类222222"     def isAnimal(self):        print("这个动物是%s222222"%self.animalType) class Cat(Animal,Animal2):#子类多继承两个父类    pass b = Cat()#定义一个b接收子类Cat()print(b.animalType)#子类调用父类的属性b.isAnimal()#子类调用父类的方法
    

    ** 运行结果:**

    image

    **注意; **

    • 多继承可以继承多个父类,也继承了所有父类的属性和方法
    • 注意:如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)
    • 多个父类中,不重名的属性和方法,不会有任何影响。

    二、子类重写父类的同名属性和方法

    class Animal():  # 父类Animal()    def __init__(self):  # init默认的属性        self.animalType = "动物种类111111"     def isAnimal(self):        print("这个动物是%s111111" % self.animalType)  class Animal2():  # 父类Animal2()    def __init__(self):  # init默认的属性        self.animalType = "动物种类222222"     def isAnimal(self):        print("这个动物是%s222222" % self.animalType)  class Cat(Animal, Animal2):  # 子类多继承两个父类    def __init__(self):        self.animalType = "子类333333"     def isAnimal(self):        print("这个子类是%s333333" % self.animalType)  b = Cat()  # 定义一个b接收子类Cat()print(b.animalType)  # 子类重写父类的属性b.isAnimal()  # 子类重写父类的方法
    

    ** 运行结果:**

    image

    三、super()的调用

    class Animal():  # 父类Animal()    def __init__(self):  # init默认的属性        self.animalType = "动物种类111111"     def isAnimal(self):        print("这个动物是%s111111" % self.animalType)  class Animal2(Animal):  # 继承Animal!!!!!!!!!!!!!!!    def __init__(self):  # init默认的属性        self.animalType = "动物种类222222"     def isAnimal(self):        print("这个动物是%s222222" % self.animalType)        super().__init__()        super().isAnimal()  # 继承父类调用父类的方法所以打印是:这个动物是动物种类111111111111  class Cat(Animal2, Animal):    def __init__(self):        self.animalType = "子类333333"     def isAnimal(self):        self.__init__()        print("这个子类是%s333333" % self.animalType)     def isCat(self):        super().__init__()  # 执行父类的 __init__方法        super().isAnimal()  # 执行父类的 实例方法        self.isAnimal()  # 执行本类的实例方法  b = Cat()  # 定义一个b接收子类Cat()b.isAnimal()b.isCat()
    

    运行结果:

    image

    子类继承了多个父类,如果父类类名修改了,那么子类也要涉及多次修改。而且需要重复写多次调用,显得代码臃肿。

    使用super() 可以逐一调用所有的父类方法,并且只执行一次。调用顺序遵循 mro 类属性的顺序。

    注意:

    如果继承了多个父类,且父类都有同名方法,则默认只执行第一个父类的(同名方法只执行一次,

    目前super()不支持执行多个父类的同名方法)

    super() 在Python2.3之后才有的机制,用于通常单继承的多层继承。

    相关文章

      网友评论

          本文标题:Python学习基础知识之 面向对象的简单基础,常见操作(单继承

          本文链接:https://www.haomeiwen.com/subject/bcqcyktx.html