可以使用dir()
函数来获取的(部分)列表的对象具有的属性,如所以:
>>> class Foo:
... def __init__(self):
... self.name = None
... self.uuid = None
>>> thing = Foo()
>>> dir(thing)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'uuid']
或者,vars()
函数可用于获取__dict__
属性为对象:
>>> class Foo:
... def __init__(self):
... self.name = None
... self.uuid = None
>>> thing = Foo()
>>> vars(thing)
{'name': None, 'uuid': None}
但是,正如几位评论者指出的那样,很可能有更好的方法来完成您正在尝试做的事情。 dir()
函数不一定会返回对象具有的所有属性的完整列表;从文档:
如果对象不提供__dir__()
,该功能会尽可能从对象的__dict__
属性收集信息,如果定义,并从其类型的对象。结果列表不一定完整,并且在对象具有自定义__getattr__()
时可能不准确。
因为dir()
主要是为了方便在交互式提示符下使用而提供,它试图提供一组有趣的名称,而不是试图提供一组严格或一致定义的名称,其详细行为可能会改变版本。例如,当参数是一个类时,元类属性不在结果列表中。
它看起来像你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。展示这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ](http://stackoverflow.com/tour)和[如何提问](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3
你想从'some_object'或者'some_object()'得到这个列表吗?即从*类定义*或从该类的一个实例...? – deceze
也不确定这与“懒惰”有什么关系......? – deceze