访问父类的类属性

时间:2010-11-05 16:38:40

标签: python oop inheritance attributes

我想知道当我不知道它们的名字时获取类的所有属性的最佳方法是什么。

让我说我有:

#!/usr/bin/python2.4

class A(object):
    outerA = "foobar outerA"
    def __init__(self):
        self.innerA = "foobar innerA"

class B(A):
    outerB = "foobar outerB"
    def __init__(self):
        super(B, self).__init__()
        self.innerB = "foobar innerB"

if __name__ == '__main__':
    b = B()

使用hasattr / getattr获取我的b实例的“outerA”类字段工作正常:

>>> print hasattr(b, "outerA")
>>> True

>>> print str(getattr(b, "outerA"))
>>> foobar outerA

好的,那很好。

但是,如果我不确切地知道b继承了一个名为“outerA”的字段但我还想得到它呢?

要访问b的内部字段,我通常使用b.__dict__。要获得b.outerB,我可以使用b.__class__.__dict__,但仍然不会在其中显示“outerA”:

>>> print "-------"
>>> for key, val in b.__class__.__dict__.iteritems():
...     print str(key) + " : " + str(val)
>>> print "-------\n"

节目:

-------
__module__ : __main__
__doc__ : None
__init__ : <function __init__ at 0xb752aaac>
outerB : foobar outerB
-------

我的outerA在哪里?的:d

我确信我可以继续“攀登”类层次结构并获得所有字段,但这似乎不是最好的解决方案......

因为有hasattr(),getattr()...是不是像 listattr()那样会提供实例的所有可用属性?

谢谢!

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找dir() - 它在代码中的效果与在shell中一样。

答案 1 :(得分:1)

试试dir(b)。结果列表包含继承的属性。