As mentioned on SE可以使用dir(someObject)
或someObject.__dict__
获取对象的所有可迭代属性。 如何获取不可迭代的属性?某些库(如Reqests)返回具有不可迭代属性的对象。
答案 0 :(得分:2)
不可能在每种情况下都可靠地列出所有属性,因为可以使用__getattr__
或__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__
和类__dict__
等所获得的结果。类可以重新定义dir()
的工作方式他们的实例是通过定义__dir__
方法,但我从未见过它。
如果这种方法存在并且出于某种原因“隐藏”某些属性,您可以这样做
类似的东西:
attributes = list(object.__dict__.keys()) + list(obj.__slots__) + list(type(obj).__dict__)
(通过适当的错误检查!)以获得默认的dir()
输出。
这就是说,如果您对某个特定的库感兴趣,那么可能会有一些特定于该库的方法可靠地工作。
答案 1 :(得分:1)
import pprint from pprint
pprint (vars(<object name>))