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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。