您正在使用wrong搜索目标(第一个参数);使用super(B, self)
反而:
def __init__(self):
self.a = super(B, self).q
第一个参数给出super()
一个起点;它的意思是查看 MRO,从我给你的下一堂课开始,其中 MRO 是方法解析顺序second争论 (type(self).__mro__
).
通过告诉super()
开始回顾过去A
,你有效地告诉了super()
开始搜索距离 MRO 太远。object
是下一个,并且该类型没有have a q
属性:
>>> B.__mro__
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
你的真实代码有完全相同的问题:
class Dirchanger(D):
def __init__(self,client,*args):
if len(args) == 1:
self.cd(args[0])
def cd(self,directory):
super(D, self).cd(directory)
您开始 MRO 搜索的位置为D
, not Dirchanger
here.