2012-12-08 94 views
-4

我有一個關於下一個python代碼的問題。python lt-method

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假真」 如何只改變__lt__ - 方法中所述的那乙實例ID是不同的(即而不是「1 2 1 2 False False」可以看到「False False」)?可能嗎? B必須相同。

+0

恐怕我無法理解這個問題。 – NPE

+1

特別是,'__lt__'與這裏的* anything *有什麼關係? – NPE

+1

擺脫額外的打印語句? – Sheena

回答

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)是相同的,而仍然能看到它是不是同一個對象的測試。