如 SE 中所述,dir(someObject)
可以使用或获取对象的所有可迭代属性someObject.__dict__
。如何获得不可迭代的属性?一些库,例如 Reqests,返回具有不可迭代属性的对象。
问问题
514 次
2 回答
2
不可能在每种情况下都可靠地列出所有属性,因为属性可以在运行时使用__getattr__
or定义__getattribute__
。
例如,以下类有 50% 的机会创建新属性或引发AttributeError
.
import random
class AttributeGenerator(object):
def __getattr__(self, attr):
if random.random() < 0.5:
setattr(self, attr, None)
return getattr(self, attr)
else:
raise AttributeError(attr)
从实例中获取属性的唯一通用函数是dir()
和vars()
。
请注意,dir()
默认情况下,将通过__dict__
,__slots__
和 class'__dict__
等获得的结果组合在一起。类可以dir()
通过定义方法来重新定义其实例的工作__dir__
方式,但是我从未见过它使用过。如果此方法存在并且由于某种原因“隐藏”某些属性,您可以简单地执行以下操作:
attributes = list(object.__dict__.keys()) + list(obj.__slots__) + list(type(obj).__dict__)
(使用适当的错误检查!)以获得默认的dir()
输出。
这就是说,如果您对特定库感兴趣,那么可能有一些特定于该库的方法可以可靠地工作。
于 2013-10-29T13:22:05.833 回答
1
import pprint from pprint
pprint (vars(<object name>))
于 2013-10-29T13:19:53.513 回答