Python使用type构造类工厂时同名类属性不同的原因咨询
同名动态类属性隔离的原因解释
核心误区澄清
你看到的<class '__main__.MyClass'>只是类对象的字符串打印结果,不是类的唯一身份标识,不能作为两个类是否为同一对象的判断依据。
具体运行逻辑
- 每次调用
type()动态创建类时,Python都会生成一个全新的、独立的类对象,分配独立的内存空间,和之前是否创建过同名类没有任何关联。你可以通过身份判断直接验证:
这说明print(case1 is case2) # 输出False print(id(case1) == id(case2)) # 输出Falsecase1和case2从根上就是两个完全无关的类对象。 - 打印结果里的
MyClass只是新创建类的__name__属性值,__main__是类的__module__属性值,二者都只是可修改的元数据,和类对象的身份没有绑定关系。你甚至可以手动修改类名属性,不会对另一个类产生任何影响:case1.__name__ = "Demo" print(case1) # 输出 <class '__main__.Demo'> print(case2) # 仍然输出 <class '__main__.MyClass'> - 调用
type()创建类时传入的属性字典,会直接绑定到当次生成的新类上。第一次调用传入class1,myclass属性就属于case1这个独立类;第二次调用传入class2,属性就属于case2,二者的属性空间完全隔离,自然不会相等。 - 额外说明:用
type()传类名参数创建类时,Python不会自动把新类绑定到当前命名空间的同名变量上。你可以直接在交互环境输入MyClass,会触发NameError,因为全局命名空间里根本不存在MyClass这个变量,两个类只是自身的名字属性叫MyClass而已。
内容的提问来源于stack exchange,提问作者Veniamin
相关产品推荐
相关产品推荐

