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
です。組み込み型との比較がどのように機能するかを誰かが説明できますか?