python继承的时候在子类中调用父类的方法

1、使用: 父类.方法名(参数)
class Base:

def __init__(self):
print('init action in father class Base')

class A(Base):
def __init__(self):
print('init action in subclass A')
Base.__init__(self) # 在子类中调用父类的方法:父类名.方法名称(参数)

if __name__ == '__main__':
A()

这种方法的缺点是,当父类的名字改变的时候,子类中调用的时候,类名的地方也需要修改。
因此当多个类同时继承于一个父类,这个父类的类名字改变的时候,就会导致需要多个子类中这一处的代码需要修改。
2、super()方法:
在子类中使用super方法调用父类中的方法,有2种表现形式:
第一种
super().方法名(参数)

class Base:
def __init__(self):
print('init action in father class Base')

class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(参数)

if __name__ == '__main__':
A()

第二种

super(type或者type生成的类对象,self).方法名(参数)

 

class Base:
def __init__(self):
print('init action in father class Base')

class A(Base):
def __init__(self):
print('init action in subclass A')
super(A,self).__init__() #使用super(type,instance).__init__(参数)

if __name__ == '__main__':
A()

 

super().__init__()<===等价====>super(A,self).__init__()

 多层继承1

class Base:
def __init__(self):
print('init action in father class Base')

class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(参数)
class B(A):
def __init__(self):
print('init action in subclass B')
super().__init__() #使用super().__init__(参数)

if __name__ == '__main__':
B()

 
 多层继承2
class Base:
def __init__(self):
print('init action in father class Base')

class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(参数)
class B(A):
def __init__(self):
print('init action in subclass B')
super(A,self).__init__() #使用super(type,self).__init__(参数)

if __name__ == '__main__':
B()


class Base:
def __init__(self):
print('init action in father class Base')

class A(Base):
def __init__(self):
print('init action in subclass A')
super().__init__() #使用super().__init__(参数)
class B(A):
def __init__(self):
print('init action in subclass B')
super(A,A).__init__(self) #使用super(type,self).__init__(参数),这注释部分的代码都可以试试
#super(A,B).__init__(self)  
#super(B,A).__init__(self)
#super(Base,Base).__init__(self)
if __name__ == '__main__':
B()


使用super的时候

 super(type1,[type2_or_obj]),type1决定了super前往哪个父类调用指定的方法。


如果使用的时候,一个type1类继承了两个父类,那么按照前后顺序,调用继承的第一个父类中的方法。
posted @ 2020-05-27 15:55  一日学一日功  阅读(1403)  评论(0编辑  收藏  举报