isinstance函数用于判断某个对象是不是某个类的实例,例如:
>>> isinstance('helloword', str)
True
但如果类是通过type函数动态生成的,使用时要注意,看下边的列子:
def create_class(cls_name: str):
return type(cls_name, (), dict())
if __name__ == '__main__':
a = create_class("MyClass")()
B = create_class("MyClass")
print(type(a))
print(B)
print(isinstance(a, B))
运行结果
<class '__main__.MyClass'>
<class '__main__.MyClass'>
False
可以看到,虽然对象a的类与类B的路径是一样的,但a并不是类B的实例。
原因分析:类本身也是对象,对象a对应的类和类B是create_class函数返回的两个不同的对象,存在于不同的内存地址中。