說我有一個自定義類:如何比較類型的自定義類的
class MyClass():
pass
,我想測試,如果這是MyClass的實例。這可以在沒有轉換爲字符串的醜陋混亂的情況下完成嗎?
str(type(MyClass())) == "<class '__main__.MyClass'>"
說我有一個自定義類:如何比較類型的自定義類的
class MyClass():
pass
,我想測試,如果這是MyClass的實例。這可以在沒有轉換爲字符串的醜陋混亂的情況下完成嗎?
str(type(MyClass())) == "<class '__main__.MyClass'>"
可以這樣,無須轉換爲字符串的醜陋的爛攤子實現的呢?
是的。使用內置功能isinstance
。從文檔:
如果object參數是classinfo參數的實例或其(直接,間接或虛擬)子類的實例,則返回true。如果object不是給定類型的對象,則該函數總是返回false。
>>> class MyClass():
... pass
...
>>> isinstance(MyClass(), MyClass)
True
你也可以做到這一點使用type
這樣:
>>> type(MyClass) == type(MyClass)
True
但這不是推薦,因爲type
未能採取亞型考慮在內。 From the documentation for type
:
的
isinstance()
內置函數建議用於測試對象的類型,因爲它需要的子類考慮進去。
或...在這種情況下......不推薦。 –
@cᴏʟᴅsᴘᴇᴇᴅ啊,我看到你在那裏做了什麼;-)(當然,這是假設你想開個玩笑,如果情況並非如此,你想告訴我在我的答案中有嚴重的錯誤,只是忽略整個評論,我似乎很難說有人在開玩笑)。 –
是的,你的帖子沒有問題,這就是爲什麼我高舉了它。 :p –
使用__class__.__name__
的情況下,像這樣:
>>> class MyClass():
... pass
...
>>> i = MyClass()
>>> i.__class__.__name__
'MyClass'
或者,isinstance
如果你有機會到父類:
>>> isinstance(i, MyClass)
True
作爲一類的任何對象,也任何父類的實例isinstance
將返回所有父母的True
:
>>> class MyOtherClass(MyClass):
... pass
...
>>> q = MyOtherClass()
>>> isinstance(q, MyClass)
True
>>> isinstance(q, MyOtherClass)
True
>>> isinstance(q, object)
True
但是:
>>> q.__class__.__name__
'MyOtherClass'
如果不訪問該類,OP將無法創建'i'。 – AChampion
你的意思是像'isinstance(MyClass(),MyClass)#True'?注意:'type(MyClass())== MyClass'也可以工作,但不推薦使用。 – AChampion
實際上並非如此。 – v4gil
我正在尋找類似於上面的答案,因爲它也可以在[class1,class2]'中用作type(MyClass())。 – v4gil