基本上,我遇到的问题是here,并且有一些答案,如下所示,其中Son
执行某些操作,例如Father
(本例中为init)和其他一些GrandFather
(do_thing
)等内容。
class GrandFather(object):
def __init__(self):
pass
def do_thing(self):
# stuff
class Father(GrandFather):
def __init__(self):
super(Father, self).__init__()
def do_thing(self):
# stuff different than Grandfather stuff
class Son(Father):
def __init__(self):
super(Son, self).__init__()
def do_thing(self):
super(Father, self).do_thing() # <-- this line bypasses Father's implementation
我想知道的是,如果对super
这样的调用(上面的最后一行)有任何影响,即传递除你自己以外的类类型。
我的意思是你的代码在一些奇怪的地方打破,你不指望它。
答案 0 :(得分:0)
您所询问的内容通常会有效,但在多重继承存在的情况下,它可能无法完全满足您的要求。例如,如果Son
也继承自Mother
类(由于乱伦也是Grandfather
的子类),您将无法从最后一行获得预期的电话:
class GrandFather(object):
def do_thing(self):
print("Grandfather")
class Father(GrandFather):
def do_thing(self):
print("Father")
class Mother(GrandFather):
def do_thing(self):
print("Mother")
class Son(Father, Mother):
def do_thing(self):
super(Father, self).do_thing() # will print "Mother", not "Grandfather"
如果在Son
子类中添加了多重继承(例如class GrandSon(Son, Mother): pass
,而您之前定义的Son
只继承自Father
),则此问题甚至会突然出现问题
这可能是也可能不是你想要的。如果您希望GrandFather
始终do_thing
实施GrandFather.do_thing(self)
,则应明确呼叫super
,而不是尝试使用GrandFather.do_thing
。
但是,让课程绕过父母方法通常不是一个好主意。重新组织代码可能会更好地为您服务,因此不需要它。也许您可以将Son
中希望Father
能够用于单独方法的部分分解出来。您无需在Father.do_thing
中覆盖该方法,也不能从$SelList = "ProcessName,Handles"
调用该方法。