2016-09-05 51 views
-3

所以基本上我需要懒惰的帮助。Python:列出来自对象的变量

是否有可能在python取一个对象,然后列出了所有它的变量

例如

class some_object: 
    def __init__(self): 
    self.Name = None 
    self.UUID = None 

然后调用一个神奇的功能,列出对象中的所有变量名

也许返回的东西看起来接近这个:

[some_object.Name, some_object.UUID] 

请记住,我不需要附加到对象的值,而是变量的名称,如名称和UUID

如果任何人都可以帮助我,那就太棒了。

编辑: 感谢大家回答我的问题,我需要的神奇功能是vars()。我真的很感谢大家的努力和投入

+0

它看起来像你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。展示这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出以及实际获得的输出(输出,回溯等)。您提供的细节越多,您可能会收到的答案就越多。检查[FAQ](http://stackoverflow.com/tour)和[如何提问](http://stackoverflow.com/questions/how-to-ask)。 – TigerhawkT3

+0

你想从'some_object'或者'some_object()'得到这个列表吗?即从*类定义*或从该类的一个实例...? – deceze

+0

也不确定这与“懒惰”有什么关系......? – deceze

回答

2

可以使用瓦尔(问题):

class about_me: 
    def __init__(self): 
    self.name = "Lyend Victorian" 
    self.age = "25" 
    self.height = "180" 

me = about_me() 

>>> vars(me) 
{'age': '25', 'name': 'Lyend Victorian', 'height': '180'} 
2

可以使用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()主要是为了方便在交互式提示符下使用而提供,它试图提供一组有趣的名称,而不是试图提供一组严格或一致定义的名称,其详细行为可能会改变版本。例如,当参数是一个类时,元类属性不在结果列表中。