2013-01-31 64 views
0

當我在Python中定義一個新樣式的類時,我可以使用__dict__ -Attribute獲取定義的屬性(名稱和值),該屬性包含事物的字典。如何在Python中的類使用__slots__時獲取屬性的名稱?

我想用我的類及其子類插槽,因爲我會創建的實例數十萬,並希望節省一些內存。但是,使用__slots__的類將不具有__dict__ -Attribute,因此我無法以這種方式反思性地訪問它們的值。

有沒有另一種方法,最好保留爲這樣的類定義的屬性的順序?

任何幫助將不勝感激!

+2

請注意,因爲'__dict__'是一個字典,所以列出的屬性沒有定義順序。 –

+2

相關:什麼是在python目錄和\ _ \ _ dict__之間最大的區別(http://stackoverflow.com/q/14361256) –

+0

@MartijnPieters,我會書籤,對於未來的連接使用,極大的答案。 –

回答

5

您應該使用dir() built-in function來列出對象的成員,而不是直接訪問__dict____slots__

實例__dict__將僅列出直接在實例上設置的屬性,而dir()將列出該類的屬性(包括方法)以及該類的屬性(包括方法)。它還會列出任何定義爲插槽的內容。

您可以使用inspect module來幫助您篩選dir()的輸出;如果您對方法不感興趣,例如inspect.ismethod()可以提供幫助。

+0

+1。根據所做的工作,[inspect'模塊](http://docs.python.org/py3k/library/inspect.html)也值得一看。 –

相關問題