如 SE 中所述,dir(someObject)可以使用或获取对象的所有可迭代属性someObject.__dict__。如何获得不可迭代的属性?一些库,例如 Reqests,返回具有不可迭代属性的对象。
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 回答