有没有办法获得所有属性/方法/字段/等。 Python中的对象?
vars()
关闭到我想要的东西,但它不起作用,除非一个对象有一个__dict__
,这并不总是正确的(例如它不是真的适用于list
,dict
等。)
答案 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))