Python子类不显示父类属性

时间:2013-12-06 20:50:25

标签: python class inheritance

我正在使用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? 

为什么呢?

3 个答案:

答案 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 super considered Super!
2 super considered harmful

答案 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?