如何与自定义类的类型进行比较

v4g*_*gil 3 python

假设我有一个自定义类:

class MyClass():
    pass
Run Code Online (Sandbox Code Playgroud)

我想测试这是否是 MyClass 的一个实例。这可以在没有转换为字符串的丑陋混乱的情况下完成吗?

str(type(MyClass())) == "<class '__main__.MyClass'>"
Run Code Online (Sandbox Code Playgroud)

Chr*_*ean 9

这可以在没有转换为字符串的丑陋混乱的情况下完成吗?

是的。使用内置函数isinstance。从文档:

如果 object 参数是 classinfo 参数或其(直接、间接或虚拟)子类的实例,则返回 true。如果 object 不是给定类型的对象,则该函数始终返回 false。

>>> class MyClass():
...     pass
... 
>>> isinstance(MyClass(), MyClass)
True
Run Code Online (Sandbox Code Playgroud)

你也可以用type这种方式做到这一点:

...
>>> type(MyClass()) == MyClass
True
Run Code Online (Sandbox Code Playgroud)

但这不是推荐的,因为type没有考虑到子类。从文档中type

isinstance()建议使用内置函数来测试对象的类型,因为它考虑了子类。