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函数返回的两个不同的对象,存在于不同的内存地址中。
本文探讨了Python中isinstance函数的工作原理,特别是在类是通过type函数动态生成时可能出现的问题。示例展示了即使两个类有相同的名称和路径,由于它们是不同对象,isinstance返回False。这揭示了类作为对象的特性及其内存地址的影响。
1178

被折叠的 条评论
为什么被折叠?



