获取Python中的所有对象属性?

有没有办法获得所有的属性/方法/字段/等。 Python中的对象?

vars() 接近我想要的,但它不工作,除非对象有一个__dict__ ,这并不总是真实的(例如,它不是真正的listdict等)。

使用内置函数dir()

你可能想要的是dir()

__dir__是,类可以覆盖特殊的__dir__方法,这会导致dir()返回类所需的任何东西(尽pipe鼓励他们返回一个精确的列表,但这并不是强制执行的)。 此外,一些对象可以通过覆盖__getattr__来实现dynamic属性,可以是RPC代理对象,或者可以是C扩展类的实例。 如果你的对象是一个这样的例子,它们可能没有__dict__ 或者能够通过__dir__提供一个完整的属性列表:这些对象中的许多可能有这么多的dynamic属性,它不会真的知道它有什么您尝试访问它。

在短期内,如果dir()是不够的,你可以编写一个函数,它遍历__dict__对象,然后__dict__所有的类在obj.__class__.__mro__ ; 尽pipe这只适用于普通的python对象。 从长远来看,你可能不得不使用鸭子打字+假设 – 如果它看起来像鸭子,交叉手指,并希望它有。

我用__dict__

例如

 class MyObj(object): def __init__(self): self.name = 'Chuck Norris' self.phone = '+6661' obj = MyObj() print(obj.__dict__) # Output: # {'phone': '+6661', 'name': 'Chuck Norris'}