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

时间:2011-07-30 23:03:44

标签: python introspection python-2.6

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

vars() 关闭到我想要的东西,但它不起作用,除非一个对象有一个__dict__,这并不总是正确的(例如它不是真的适用于listdict等。)

4 个答案:

答案 0 :(得分:384)

使用内置函数dir()

答案 1 :(得分:67)

您可能想要的是dir()

问题是类可以覆盖特殊的__dir__方法,这会导致dir()返回类所需的任何内容(尽管鼓励它们返回准确的列表,但这不会强制执行) 。此外,一些对象可以通过覆盖__getattr__来实现动态属性,可以是RPC代理对象,或者可以是C扩展类的实例。如果您的对象是这些示例之一,则他们可能没有__dict__ 能够通过__dir__提供全面的属性列表:这些对象中的许多可能有这么多在尝试访问它之前,它实际上并不会真正知道它有什么

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

答案 2 :(得分:56)

我使用__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'}

答案 3 :(得分:7)

您可以使用dir(your_object)获取属性,并使用getattr(your_object, your_object_attr)获取值

用法:

for att in dir(your_object):
    print (att, getattr(your_object,att))