2016-01-18 29 views
0

Python類包含命名空間,函數dir列出命名空間的內容。列出python命名空間中的所有元素

object命名空間包含幾個函數,例如函數__subclasses__,它們在調用時會返回一個包含所有已知類的列表,該列表是object的子類。

dir(object)輸出是:

['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', 
'__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__setattr__', '__sizeof__', '__str__', '__subclasshook__'] 

__subclasses__功能還沒有上市,但它的存在,嘗試:object.__subclasses__()

我明白,一個類可以改變__dir__字典定製什麼dir顯示,但是這不是object的情況下,實際上object.__dir__拋出一個例外。

不過,當我使用IPython自動完成時,__subclasses__函數就在那裏。我如何獲得IPython使用的相同元素列表,以便我知道__subclasses__也在那裏?

+1

「Python類只是命名空間」 - 不是它們不是。 – user2357112

+0

@ user2357112:你能詳細說一下嗎?從python文檔[這裏](https://docs.python.org/2/tutorial/classes.html)我讀到:*當類定義保持正常(通過結束)時,創建一個類對象。這基本上是由類定義創建的名稱空間的內容的一個包裝; * –

+0

雖然類對象包裝類聲明的名稱空間,但說一個類只是一個名稱空間,就像說人類只是左腿。命名空間只是該類的一部分。 – user2357112

回答

2

IPython通過完全普通的方式找到__subclasses__,查看type(object)。另一方面,因爲object是一種類型,所以dir for types具體不看type(object)。誰寫了dir決定在列表中看到元類的屬性會令人困惑。

相關問題