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类继承了两个父类,那么按照前后顺序,调用继承的第一个父类中的方法。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM