我想知道當我不知道它們的名稱時,獲取類的所有屬性的最佳方式是什麼。訪問父類的類屬性
比方說,我有:
#!/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」 中的IT領域:
>>> 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()這將提供一個實例的所有可用屬性?
謝謝!
So cooool !!!這就是我需要的! – BorrajaX 2010-11-05 17:02:18