當我在Python中定義一個新樣式的類時,我可以使用__dict__
-Attribute獲取定義的屬性(名稱和值),該屬性包含事物的字典。如何在Python中的類使用__slots__時獲取屬性的名稱?
我想用我的類及其子類插槽,因爲我會創建的實例數十萬,並希望節省一些內存。但是,使用__slots__
的類將不具有__dict__
-Attribute,因此我無法以這種方式反思性地訪問它們的值。
有沒有另一種方法,最好保留爲這樣的類定義的屬性的順序?
任何幫助將不勝感激!
當我在Python中定義一個新樣式的類時,我可以使用__dict__
-Attribute獲取定義的屬性(名稱和值),該屬性包含事物的字典。如何在Python中的類使用__slots__時獲取屬性的名稱?
我想用我的類及其子類插槽,因爲我會創建的實例數十萬,並希望節省一些內存。但是,使用__slots__
的類將不具有__dict__
-Attribute,因此我無法以這種方式反思性地訪問它們的值。
有沒有另一種方法,最好保留爲這樣的類定義的屬性的順序?
任何幫助將不勝感激!
您應該使用dir()
built-in function來列出對象的成員,而不是直接訪問__dict__
或__slots__
。
實例__dict__
將僅列出直接在實例上設置的屬性,而dir()
將列出該類的屬性(包括方法)以及該類的屬性(包括方法)。它還會列出任何定義爲插槽的內容。
您可以使用inspect
module來幫助您篩選dir()
的輸出;如果您對方法不感興趣,例如inspect.ismethod()
可以提供幫助。
+1。根據所做的工作,[inspect'模塊](http://docs.python.org/py3k/library/inspect.html)也值得一看。 –
請注意,因爲'__dict__'是一個字典,所以列出的屬性沒有定義順序。 –
相關:什麼是在python目錄和\ _ \ _ dict__之間最大的區別(http://stackoverflow.com/q/14361256) –
@MartijnPieters,我會書籤,對於未來的連接使用,極大的答案。 –