2016-12-23 85 views
0

我編寫了一個教育遊戲,用戶必須重現計算機提供的一個工廠。重載方法__eq __()

要在一方面限定第一部分的代碼孔,並且在另一方面線的厚度的數量,有在對角線上的」。例如,對於八邊形件,hole = [3,0,0,3]line = [0,0,2,1]編碼具有一個部分水平線上有3個孔,垂直線上有一條厚度爲2的線,並且在對角線上有一條厚度爲1的帶有3個孔的線 該中心可以由多個對角線管理,相同的零件可以用hole = [3,0,1,2],trait = [0,0,2,1]編碼

所以我超載了這樣的__eq __()方法:

def __eq__(self, other): 

    nouveau_trous = self.trous 
    res=() 
    for i in range(len(nouveau_trous)): 
     if nouveau_trous[i] == 3 or nouveau_trous[i]==1: 
      nouveau_trous[i]=nouveau_trous[i]-1 
      retenue=1 
      res=(nouveau_trous,self.traits,retenue) 
    return res==other 

( 「劈窗」=在法國 「孔」)

,當我嘗試這個辦法:

if __name__=="__main__": 
    p1=PieceModele(Canvas()) 
    p2=PieceUsine(Canvas()) 
    print(p1) 
    print(p2) 
    print(p1==p2) 
    print(p1==p2) 

我在控制檯中看到這一點:

[3, 0, 3, 3][1, 1, 1, 0] 8 
[0, 0, 0, 0][0, 0, 0, 0] 8 
False 
True 

我不明白爲什麼我得到真正的第二print(p1==p2) ...

+0

什麼是'self.trou'定義爲?你也嘗試另一副'print(p1);在第一次比較後打印(p2)'。我高度懷疑你的等號運算符實際上是修改了存儲的數據,這會導致問題 – UnholySheep

+1

如果我以前的假設結果是正確的,那麼解決方案將最有可能將'nouveau_trous = self.trous'更改爲'nouveau_trous =或者使用[複製庫](https://docs.python.org/2/library/copy.html) – UnholySheep

+0

在''後面添加'print(p1)'print(p2)''打印(p1 == p2)' – McNets

回答

0

如果我以前的假設結果是正確的,那麼解決方案將是最l可能要更改nouveau_trous = self.trous to nouveau_trous = self.trous[:]或使用複製庫 - UnholySheep

您正在比較元組,我認爲,您的類。我不知道你在任何時候如何變得真實。 - 2rs2ts