Python方法dir()不返回所有属性/方法

时间:2014-02-28 21:01:51

标签: python attributes dir

我有这段代码(来自Python 3中的Dive):

>>> import xml.etree.ElementTree as etree
>>> tree = etree.parse("feed.xml")
>>> root = tree.getroot()
>>> print(dir(root))
['__class__', '__copy__', '__deepcopy__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getstate__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'extend', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'iter', 'iterfind', 'itertext', 'keys', 'makeelement', 'remove', 'set']
>>>

列表中缺少几个属性,特别是“tag”,“text”,“attrib”等。

这是为什么?如何从对象中可靠地获取属性和方法的完整列表?

谢谢

1 个答案:

答案 0 :(得分:1)

属性实际上被定义为getattr内置函数接受的参数。由于用户可以重新实现__getattr__,突然允许任何类型的属性,因此没有可能的通用方法来生成该列表。 dir函数返回__dict__属性中的键,即如果__getattr__方法未重新实现,则可访问所有属性。