-4

我对下一个 python 代码有疑问。

class A(object):
    id = 1
    def __init__(self):
        self.id = A.id
        A.id += 1
    def getId(self):
        return self.id
    def __lt__(self, other):#This method is interested
        return self.id < other.id
class B(A):
    def __init__(self):
        self.id = 1

然后我测试它

a1 = A()
a2 = A()
b1 = B()
b2 = B()
print a1.getId(),
print a2.getId(),
print b1.getId(),
print b2.getId(),
print a1.id == a2.id,b1.id == b2.id

并查看结果“1 2 1 1 False True”如何仅更改__lt__A 中 B 实例的 id 不同的 - 方法(即可以看到“False False”而不是“1 2 1 2 False False”)?是否可以?B 必须相同。

4

1 回答 1

0

我要大胆猜测你想做什么。

在我看来,您希望 "==" 测试两个对象是否是相同的对象,而不是测试两个对象具有相同的值。

但你不需要那个。要在 Python 中测试两个对象是否相同,请使用is运算符。像这样:

>>> class A(object):
...     def __init__(self, id):
...         self.id = id
...     def __eq__(self, o):
...         return self.id = o.id
... 
>>> a = A(1)
>>> b = A(1)
>>> 
>>> a == b
True
>>> a is b
False
>>> a = b
>>> a is b
True

通过这种方式,您可以==用来测试值(即本例中的 id)是否相同,同时仍然可以看到它不是同一个对象。

于 2012-12-08T09:33:10.320 回答