2016-09-05 63 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()主要是爲了方便在交互式提示符下使用而提供,它試圖提供一組有趣的名稱,而不是試圖提供一組嚴格或一致定義的名稱,其詳細行爲可能會改變版本。例如,當參數是一個類時,元類屬性不在結果列表中。