我有一个名为IntField
的类,它封装了一个来自数据库的整数(不是真正相关的)。我想使用IntField
的实例来使用eval
来评估表达式。
这些课程如下:
class DbField(object):
def __init__(self, value):
self.value = value
def __cmp__(self, other):
print "comparing {} ({}) with {} ({})".format(self, type(self), other, type(other))
if type(self.value) == type(other):
return self.value.__cmp__(other)
elif type(self) == type(other):
return self.value.__cmp__(other.value)
raise ValueError("cannot compare {} and {}".format(type(self), type(other)))
class IntField(DbField):
def __init__(self, value):
super(IntField, self).__init__(int(value))
a = IntField(-2)
b = IntField(-2)
print "a=", a
print "b=", b
print "b == -1 ", b == -1
print "b == a ", b == a
print "a == b ", a == b
print "-1 == b ", -1 == b
我想在基类中实现的是允许自定义对象与同一类型的另一个自定义对象相比,但也与内置类型相当;我希望能够IntField == IntField
或IntField == int
。
我希望为这些比较调用第一个对象的IntField.__cmp__()
,这正在发生。但我对int == IntField
会发生什么感到困惑。似乎在这种情况下,IntField.__cmp__()
方法也被调用,而不是int
。有人可以解释与内置类型的比较是如何工作的吗?