对象与内置类型的比较

时间:2013-10-16 09:48:32

标签: python python-2.7

我有一个名为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 == IntFieldIntField == int

我希望为这些比较调用第一个对象的IntField.__cmp__(),这正在发生。但我对int == IntField会发生什么感到困惑。似乎在这种情况下,IntField.__cmp__()方法也被调用,而不是int。有人可以解释与内置类型的比较是如何工作的吗?

0 个答案:

没有答案