说明
这就是为什么您的比较结果不如预期的原因。
>>> class ClassA(object):
... pass
...
>>> class ClassB(object):
... pass
...
>>> type(ClassB)
<class 'type'>
>>> type(ClassA)
<class 'type'>
>>> type(ClassA) == type(ClassB)
True
但是为什么ClassA
和ClassB
具有相同的类型type
?引用文档:
默认情况下,使用type()构建类。类体在新命名空间中执行,并将类名本地绑定到type(name,bases,namespace)的结果。
示例:
>>> ClassB
<class '__main__.ClassB'>
>>> type('ClassB', (), )
<class '__main__.ClassB'>
>>> type(ClassB)
<class 'type'>
>>> type(type('ClassB', (), ))
<class 'type'>
获取 ClassB
的类型与获取 type('ClassB', (), {})
的类型完全相同,它们都是 type
。
解决方案
直接比较它们(不使用type()
函数):
>>> ClassA
<class '__main__.ClassA'>
>>> ClassB
<class '__main__.ClassB'>
>>> ClassA == ClassB
False
或初始化它们并比较它们对象的类型:
>>> a = ClassA()
>>> b = ClassB()
>>> type(a)
<class '__main__.ClassA'>
>>> type(b)
<class '__main__.ClassB'>
>>> type(a) == type(b)
False
顺带一提,你也可以在类中使用is
代替==
。