获取Python中的所有对象属性?
有没有办法获得所有的属性/方法/字段/等。 Python中的对象?
vars()
接近我想要的,但它不工作,除非对象有一个__dict__
,这并不总是真实的(例如,它不是真正的list
, dict
等)。
使用内置函数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'}