版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZHH_Love123/article/details/88226636
【super作用】
- 如果子类(Puple)继承父类(Person)不做初始化,那么会自动继承父类(Person)属性name。
- 如果子类(Puple_Init)继承父类(Person)做了初始化,且不调用super初始化父类构造函数,那么子类(Puple_Init)不会自动继承父类的属性(name)。
- 如果子类(Puple_super)继承父类(Person)做了初始化,且调用了super初始化了父类的构造函数,那么子类(Puple_Super)也会继承父类的(name)属性
# coding = utf-8
import requests
class Person(object):
def __init__(self,name = "person"):
self.name = name
class Pupel(Person): # 不做初始化 会自动继承父类属性 name
pass
class Puple_init(Person): # 做初始化 且不调用super初始化父类构造函数 不会继承父类属性 name
def __init__(self,age):
self.age = age
class Puple_super(Person): # 做初始化 也调用super().__init__(name)初始化父类构造函数 会继承父类属性 name
def __init__(self,name,age):
self.age = age
super().__init__(name)
pp = Pupel()
pp_i = Puple_init(10)
pp_s = Puple_super("supder_person", 10)
print(pp.name) #person
# print(pp_i.name) #AttributeError: 'Puple_init' object has no attribute 'name'
class Father(object):
def __init__(self, name):
self.name=name
print ( "name: %s" %( self.name))
def getName(self):
return 'Father ' + self.name
class Son(Father):
def __init__(self, name):
super(Son, self).__init__(name)
print ("hi")
self.name = name
def getName(self):
return 'Son '+self.name
if __name__=='__main__':
son=Son('runoob')
print ( son.getName() )
【继承顺序】
class A:
def __init__(self):
print('A')
class B(A):
def __init__(self):
print('B')
super().__init__()
class C(A):
def __init__(self):
print('C')
super().__init__()
class D(A):
def __init__(self):
print('D')
super().__init__()
class E(B, C):
def __init__(self):
print('E')
super().__init__()
class F(C, D):
def __init__(self):
print('F')
super().__init__()
class G(E, F):
def __init__(self):
print('G')
super().__init__()