我在模块classes.py
中定义了两个类:
class ClassA(object):
pass
class ClassB(object):
pass
在另一个模块中,我得到了模块的属性:
import classes
Class1 = getattr(classes, 'ClassA')
Class2 = getattr(classes, 'ClassA')
print type(Class1) == type(Class2)
Class3 = getattr(classes, 'ClassA')
Class4 = getattr(classes, 'ClassB')
print type(Class3) == type(Class4)
两种类型的比较都返回True,这不是我所期望的。
如何使用python的本机类型值比较类类型?
解释
这就是为什么你的比较没有达到预期的效果
但是为什么
ClassA
和ClassB
具有相同的类型type
?引用docs:示例:
获取
ClassB
的类型与获取type('ClassB', (), {})
的类型完全相同,即type
。解决方案
直接比较它们(w/out使用
type()
函数):或初始化它们并比较它们的对象类型:
FWIW您还可以使用
is
代替==
(用于类)。如果要检查类型是否相等,则应使用
is
运算符。示例:我们可以创建下一个愚蠢的元类
然后根据它来上课:
在Python 2中
在Python 3中
那么简单的检查
返回
False
,而下一个检查返回预期的True
值因此我们可以看到
==
运算符可以被重写,而没有简单的方法来改变is
运算符的行为。您正在比较类对象的类型,它们都是类型
'type'
。如果只想比较类,请直接比较它们:
相关问题 更多 >
编程相关推荐