如何获取没有__dict__的Python对象的属性列表?

0 投票
2 回答
7347 浏览
提问于 2025-04-17 02:21

你会如何处理一个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 个回答

1

xml.etree.ElementTree.Element这个对象确实有一个叫做__dict__的东西。

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

__dict__是一个字典,用来存放当前定义的属性。dir()这个函数会调用__dir__(),而__dir__()是可以被重写的。

3

如果通过自定义的 __getattr____getattribute__ 方法返回属性,你就不能确定某个属性是否会被返回,除非你去尝试一下。而且你也不能得到一个完整的属性列表,因为你得尝试所有可能的名字才能知道。想要获取静态属性的列表,可以使用 dir() 这个函数。

撰写回答