概念二 python3 中子类继承父类

python 中子类继承父类的三种情况;

1. 子类中的初始化函数

python中类的初始化都是def __init__()
所以父类和子类的初始化方式都是__init__()

  1. 但是如果子类初始化时没有这个函数,那么它便调用父类的__init__()
  1. 如果子类实现了def __init__这个函数,就会覆盖父类的初始化函数。
  1. 如果继承父类的__init__(),就需要在子类中显示调用这个函数。

所以,当子类中

  1. 既需要在自己的初始化函数中, 增加或者重写自己的部分属性;重写自己的属性,
  2. 又需要保留父类中的属性时;

这情况时, 子类在定义自己的初始化函数时def __init__(self, ), 便会结合super(sub_class, self) 一起使用;

实现如下:

class Animal(object):
     def __init__(self):
         self.name = " I am a  father class"


class Panda(Animal):
    def  __init__(self):   // 重写父类中的属性
        super(Panda, self).__init__()  //继承父类中的属性;



if __name__ == "__main__":
   panda = Panda()
   print(panda.name)


2.子类继承父类的三种情况

  1. 类的初始化函数 def __init__()

  2. 子类继承父类的属性与方法 super(sub_className, self).__init__ 的使用

class Person:
    def __init__(self, name = "person"):
        self.name = name


class  Puple(Person):   #  sub class1
     pass

class Puple_Init(Person):   # sub class2
    def  __init__(self, age):    #  覆盖父类中的__init__ 方法, 丢失父类中self. name 属性;
        self.age = age

class Puple_Super(Person):       # sub class3
    def __init__(self, name, age):    #   重载父类中 __init__ 方法,
        self.age = age
       # super(Puple_Super, self).__init__()  # 并继承父类中self.name 属性, 没有传入 name 时, 保留父类中的 name;
        super(Puple_Super, self).__init__(name)  #  传入name 时, 更新为 当前子类中 name;

if __name__ == "__main__":
    pp  = Puple()

    pp_i = Puple_Init(10)
    pp_s = Puple_Super("puple_super", 13)

    print(pp_s.name,  pp_s.age)

2.1 子类继承父类的三种情况

1.子类1 中,没有初始化函数__init__(),那么它便调用父类的__init__()

  1. 子类2中, 实现了def __init__这个函数,就会覆盖父类的初始化函数__init__,没有使用super(sub_class, self) 丢失父类中self. name 属性;。
  1. 子类3中,重写def __init__(self) 函数, 用来增加了子类自身的属性,并且有使用super(sub_class, self) 保留父类中self. name 属性;

你可能感兴趣的:(#,python数据结构,python类的继承)