給定一個對象很容易得到蟒蛇的對象類型:如何在不用Python實例化的情況下獲取類的類型?
obj = SomeClass()
t = type(obj)
我怎麼能做到這一點,而不首先創建類的實例?
背景:一旦你有了類型,你就可以輕鬆地創建該類型的實例。使用這種機制,我想將一個類型傳遞給稍後將創建該類型實例的對象。沒有必要首先創建一個對象,這將是非常合理的,它會立即被拋棄。
給定一個對象很容易得到蟒蛇的對象類型:如何在不用Python實例化的情況下獲取類的類型?
obj = SomeClass()
t = type(obj)
我怎麼能做到這一點,而不首先創建類的實例?
背景:一旦你有了類型,你就可以輕鬆地創建該類型的實例。使用這種機制,我想將一個類型傳遞給稍後將創建該類型實例的對象。沒有必要首先創建一個對象,這將是非常合理的,它會立即被拋棄。
請參見本示例代碼:
class MyClass(object):
pass
if __name__ == '__main__':
o1 = MyClass()
c = MyClass
o2 = c()
print(type(o1), type(o2), MyClass)
定義一個類綁定到其名稱(這裏:MyClass
),這是什麼都沒有,但該定義的參考。在此示例中,發行c = MyClass
只是將類引用映射到另一個變量,變量c
和MyClass
的內容現在完全相同。因此,您可以通過調用其中的任何一個(即MyClass()
或c()
)來實例化該類的對象,從而產生相同的效果。
此外,測試實例化對象的類型導致完全相同的類引用。你甚至可以更進一步,做:
o3 = type(o1)()
它創建類的o1
是一個新的實例。
感謝您更詳細地解釋! –
't = SomeClass' – vaultah
對象的類型與創建它的類相同。因此,SomeClass對象的類型是SomeClass。在Python 2中,來自舊樣式類的對象的類型爲'instance',但在Python 3中不是這樣。 – zondo