Python:列出来自对象的变量

时间:2016-09-05 09:49:10

标签: python

所以基本上我需要帮助懒惰。

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

例如

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

然后调用一个魔术函数,列出对象中的所有变量名

并且可能返回看起来接近这个的东西:

[some_object.Name, some_object.UUID]

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

如果有人能帮助我,那就太棒了。

编辑: 感谢大家回答我的问题,我需要的神奇功能是vars()。我非常感谢每个人在这个问题上的努力和投入

2 个答案:

答案 0 :(得分:2)

您可以使用vars():

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'}

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