Python多继承时子类如何调用指定父类
作者:彭世瑜
这篇文章主要介绍了Python多继承时子类如何调用指定父类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Python多继承时子类调用指定父类
在Python中,如果一个子类继承自多个父类,并且这些父类都有相同名称的方法,你可以使用父类名直接调用指定父类的方法。
# -*- coding: utf-8 -*- class Parent1: def my_method(self): print("Parent1's my_method") class Parent2: def my_method(self): print("Parent2's my_method") class Child(Parent1, Parent2): def call_parent1_method(self): Parent1.my_method(self) if __name__ == '__main__': c = Child() c.call_parent1_method() # 输出: Parent1's my_method
在上面的例子中,Child 类同时继承了 Parent1 和 Parent2。
如果你需要在 Child 的实例方法中调用 Parent1 的 my_method,你可以直接使用 Parent1.my_method(self) 来调用。
这里的 self 是用来指向子类实例的,确保方法可以访问到实例的属性。
Python子类继承父类构造函数说明
(1) 如果在子类中需要的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法。
子类不重写__init__,实例化子类时,会自动调用父类定义的__init__。
实例:
class Father(object): def __init__(self, age): self.age=age print ( "age: %d" %( self.age) ) def getAge(self): print('父类的返回结果') return self.age class Son(Father): def getAge(self): print('子类的返回结果:') return self.age if __name__=='__main__': son=Son(18) print ( son.getAge() )
输出结果:
age: 18
子类的返回结果:
18
子类没有初始化__init__ 方法,所以默认会自动调用父类定义的__init__,因此会出现一行:age: 18
(2)如果重写了__init__ 时,实例化子类,就不会调用父类已经定义的 __init__
实例
class Father(object): def __init__(self, age): self.age=age print ( "age: %d" %( self.age) ) def getAge(self): return self.age class Son(Father): def __init__(self, age): print ( "hello world" ) self.age = age def getAge(self): return self.age if __name__=='__main__': son=Son(18) print (son.getAge() )
输出结果:
hello world
18
子类有初始化__init__ 方法,则会调用自身的初始化方法,因此不会出现上面实例中那样的:age: 18
(3)如果重写了__init__时,要继承父类的构造方法,可以使用super关键字:
super(子类,self).__init__(参数1,参数2,....)
或者另一种经典的方法:
父类名称.__init__(self,参数1,参数2,...)
实例:
class Father(object): def __init__(self, age): self.age=age print ( "name: %s" %( self.age)) def getage(self): return self.age class Son(Father): def __init__(self, age): # super(Son, self).__init__(age) # 1:super方法 Father.__init__(self,age) # 2: 经典方法 print ("hello world") self.age = age def getage(self): return self.age if __name__=='__main__': son=Son(18) print ( son.getage() )
输出结果:
name: 18
hello world
18
可以看到,会出现父类中的初始化输出结果: name: 18,也会出现子类初始化中输出结果:hello world
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。