-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

__lt__B インスタンスの ID が異なる A のメソッドのみを変更する方法 (つまり、「1 2 1 2 False False」の代わりに「False False」が表示される可能性があります)。出来ますか?B は同じでなければなりません。

4

1 に答える 1

0

私はあなたが何をしたいのかについて大げさな推測をするつもりです。

2 つのオブジェクトが同じ値を持っているかどうかをテストするのではなく、「==」で 2 つのオブジェクトが同じオブジェクトであるかどうかをテストしたいようです。

しかし、あなたはそれを必要としません。Python で 2 つのオブジェクトが同じかどうかをテストするには、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 に答える