2016-07-29 59 views
2

給定一個對象很容易得到蟒蛇的對象類型:如何在不用Python實例化的情況下獲取類的類型?

obj = SomeClass() 
t = type(obj) 

我怎麼能做到這一點,而不首先創建類的實例?

背景:一旦你有了類型,你就可以輕鬆地創建該類型的實例。使用這種機制,我想將一個類型傳遞給稍後將創建該類型實例的對象。沒有必要首先創建一個對象,這將是非常合理的,它會立即被拋棄。

+7

't = SomeClass' – vaultah

+0

對象的類型與創建它的類相同。因此,SomeClass對象的類型是SomeClass。在Python 2中,來自舊樣式類的對象的類型爲'instance',但在Python 3中不是這樣。 – zondo

回答

2

請參見本示例代碼:

class MyClass(object): 
    pass 

if __name__ == '__main__': 
    o1 = MyClass() 
    c = MyClass 
    o2 = c() 

    print(type(o1), type(o2), MyClass) 

定義一個類綁定到其名稱(這裏:MyClass),這是什麼都沒有,但該定義的參考。在此示例中,發行c = MyClass只是將類引用映射到另一個變量,變量cMyClass的內容現在完全相同。因此,您可以通過調用其中的任何一個(即MyClass()c())來實例化該類的對象,從而產生相同的效果。

此外,測試實例化對象的類型導致完全相同的類引用。你甚至可以更進一步,做:

o3 = type(o1)() 

它創建類的o1是一個新的實例。

+0

感謝您更詳細地解釋! –

相關問題