2014-02-28 85 views
1

我有這樣一段代碼(從潛水在Python 3):Python的方法目錄()不返回所有屬性/方法

>>> 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'] 
>>> 

幾個屬性列表中缺少,尤其是「標籤」,「文本「,」attrib「等。

這是爲什麼?我如何可靠地從對象中獲取屬性和方法的完整列表?

感謝

回答

1

屬性實際上定義爲由getattr內置函數接受的參數。由於用戶可以重新實現__getattr__,突然允許任何類型的屬性,所以沒有可能的通用方法來生成該列表。 dir函數返回__dict__屬性中的密鑰,即如果__getattr__方法未被重新實現,則可訪問所有屬性。

+0

「根」對象沒有__dict__屬性。難道這是一個本地的C實現嗎? – user1797036

+0

每個''''root''都有一個屬性'.attrib',它是一個'dict'。你可以像這樣訪問它:'print root.attrib'。 [文件](http://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element) – Drewness