我有一个名为的类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
's 。有人可以解释与内置类型的比较是如何工作的吗?