我正在使用python 2.6
class Father(object):
def __init__(self, *args, **kwargs):
self.is_rich = 'yes'
self.single = 'yes'
class Son(Father):
def __init__(self, *args, **kwargs):
self.has_job = 'yes'
son = Son()
print dir(son) --> Does not display Father class attributes is_rich & single?
为什么呢?
答案 0 :(得分:3)
您没有致电Father.__init__
。您需要明确地这样做或使用super
1,2 :
class Son(Father):
def __init__(self, *args, **kwargs):
Father.__init__(self, *args, **kwargs)
self.has_job = 'yes'
答案 1 :(得分:2)
你需要调用基类' s __init__
,因为python只调用类层次结构中找到的第一个__init__
方法__init__
中的Father
永远不会调用。您可以使用super
或使用Father.__init__
执行此操作,如@ mgilson的回答所示。
class Son(Father):
def __init__(self, *args, **kwargs):
super(Son, self).__init__(*args, **kwargs)
self.has_job = 'yes'
<强>演示:强>
>>> s = Son()
>>> s.is_rich
'yes'
>>> s.single
'yes'
>>> s.has_job
'yes'
答案 2 :(得分:2)
看起来你没有将你的孩子链接到其父母的初始化。
也许阅读本文会有所帮助:Why aren't Python's superclass __init__ methods automatically invoked?