可以使用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