我想知道当我不知道类的所有名称时最好的方法是什么。
假设我有:
#!/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()这样的东西不提供实例的所有可用属性吗?
谢谢!
最佳答案
尝试dir(b)
。结果列表包括继承的属性。