Как я могу получить список атрибутов объекта Python, которые не имеют __dict__? - PullRequest
0 голосов
/ 15 сентября 2011

Как бы вы сделали это для экземпляра xml.etree.cElementTree.Element?

$ python
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
>>> from xml.etree.cElementTree import Element 
>>> obj = Element('aaa')
>>> obj
<Element 'aaa' at 0x101bde270>
>>> dir(obj)
['__copy__', '__deepcopy__', '__reduce__', 'append', 'clear', 'extend', 'find', 'findall', 'findtext', 'get', 'getchildren', 'getiterator', 'insert', 'items', 'iter', 'iterfind', 'itertext', 'keys', 'makeelement', 'remove', 'set']
>>> obj.tag
'aaa'

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

Если атрибуты возвращаются через пользовательские __getattr__ или __getattribute__, вы не можете знать, будет ли возвращен атрибут без попыток, и вы не можете получить полный список, не попробовав все возможные имена.Вы можете получить список статических атрибутов через dir().

1 голос
/ 16 сентября 2011

Объект xml.etree.ElementTree.Element имеет __dict__.

>>> from xml.etree.ElementTree import Element  
>>> obj = Element('aaa')
>>> obj.__dict__
{'attrib': {}, 'tag': 'aaa', '_children': []}

__dict__ - словарь определенных в настоящее время атрибутов.dir() звонки __dir__(), которые могут быть переопределены.

...