python 中子类继承父类的三种情况;
python中类的初始化都是def __init__()
。
所以父类和子类的初始化方式都是__init__()
,
- 但是如果子类初始化时没有这个函数,那么它便调用父类的
__init__()
;
- 如果子类实现了
def __init__
这个函数,就会覆盖父类的初始化函数。
- 如果继承父类的
__init__()
,就需要在子类中显示调用这个函数。
所以,当子类中
这情况时, 子类在定义自己的初始化函数时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)
类的初始化函数 def __init__()
子类继承父类的属性与方法 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)
1.子类1 中,没有初始化函数
__init__()
,那么它便调用父类的__init__()
;
- 子类2中, 实现了
def __init__
这个函数,就会覆盖父类的初始化函数__init__
,没有使用super(sub_class, self)
丢失父类中self. name 属性;。
- 子类3中,重写
def __init__(self)
函数, 用来增加了子类自身的属性,并且有使用super(sub_class, self)
保留父类中self. name 属性;