我有2个类--say A和B作为1个class -child类的父级,A和B类都有一个方法myMethod。 现在,如果我在子类中调用mymethod,那么它会引用吗?
答案 0 :(得分:5)
它调用方法解析顺序(MRO)中首先出现的那个,它取决于定义子类继承的顺序:
>>> class A(object):
def method(self):
print('A.method')
>>> class B(object):
def method(self):
print('B.method')
>>> class C(A, B):
# ^ A appears first in definition
pass
>>> C.mro()
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>]
# ^ and therefore is first in the MRO
>>> C().method()
A.method # so that's what gets called
为了确保调用方法的所有实现,您可以使用super
,这将获得下一个实现&#34; up&#34; MRO:
>>> class A(object):
def method(self):
print('A.method')
super(A, self).method() # this will be resolved to B.method for C
>>> class B(object):
def method(self):
print('B.method')
>>> class C(A, B):
pass
>>> C.mro() # same as before
[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <type 'object'>]
>>> C().method()
A.method
B.method
请注意,在有多重继承的情况下,您必须要小心谨慎,因为向super
添加B.method
会尝试调用object.method
, isn&# 39; t 已实施。
答案 1 :(得分:0)
它将调用A.我相信它使用层次结构中的第一个,但我并不完全熟悉Python的模型。我刚用这个小样本测试过它:
class A():
def myMethod(self):
print("This is A!")
class B():
def myMethod(self):
print("This is B!")
class child(A,B):
def test(self):
self.myMethod()
test = child()
test.test()