假设我有一个自定义类:
class MyClass():
pass
Run Code Online (Sandbox Code Playgroud)
我想测试这是否是 MyClass 的一个实例。这可以在没有转换为字符串的丑陋混乱的情况下完成吗?
str(type(MyClass())) == "<class '__main__.MyClass'>"
Run Code Online (Sandbox Code Playgroud)
这可以在没有转换为字符串的丑陋混乱的情况下完成吗?
是的。使用内置函数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()建议使用内置函数来测试对象的类型,因为它考虑了子类。