2017-01-03 7 views
-2

私は関数createDeckが機能しない理由を理解できません。__eq__とインスタンスを比較する理由は何ですか?

class Card: 
    def __init__(self): 
     self.rank = tk.IntVar() 
     self.rank.set(rm.choice(rank)) 
     self.seed = tk.StringVar() 
     self.seed.set(rm.choice(seeds)) 
     self.point = tk.IntVar() 
     self.point.set(self.calculatePoint()) 
     self.value = tk.StringVar() 
     self.value.set(self.calculateValue()) 
     self.name = tk.StringVar() 
     self.name.set(self.calculateName()) 

    def __str__(self): 
     return self.name.get() + ' di ' + self.seed.get() 

    def __lt__(self, other): 
     return self.rank.get() < other.rank.get() 

    def __eq__(self, other): 
     return self.__dict__ == other.__dict__ 

    def __ne__(self, other): 
     return self.rank.get() != other.rank.get() and self.seed.get() != other.seed.get() 

    def __gt__(self, other): 
     return self.rank.get() > other.rank.get() 

class Deck: 
    def __init__(self): 
     self.deck= [] 
     self.name = tk.Label(table, text='Deck', bd=3, relief='flat') 
     self.name.grid(column=0, row=0) 

    def createDeck(self): 
     while len(self.deck) < 40: 
      x = Card() 
      if x not in self.deck: 
       deck.append(x) 
     table.create_text(500,200, text='deck is compose by %d cards' % (len(self.deck))) 
+0

[最小、完全、および検証可能な例](http://stackoverflow.com/help/mcve)を投稿すると、良い回答が得られます。 –

+0

「うまくいかない」とはどういう意味ですか?エラーが発生していますか?もしそうなら、どんなエラー? –

答えて

0

あなたの方法:

def createDeck(self): 
    while len(self.deck) < 40: 
     x = Card() 
     if x not in self.deck: 
      deck.append(x) 

は、未定義の変数deckを持っています。

self.deckにそれを変更する:

def createDeck(self): 
    while len(self.deck) < 40: 
     x = Card() 
     if x not in self.deck: 
      self.deck.append(x) 

が参考になるはずです。

+0

実際の質問はどうですか* "__eq__とインスタンスを比較するとどうしてうまくいかないのですか?" * OPは変数が初期化されていないというエラーを出すとは言及していませんでした。 –

+2

これは "createDeck関数がなぜ機能しないのかわかりません"という疑問があるようです。 –

+0

あなたも正しいです。 OPが何を必要としているかは完全には分かりませんが –

関連する問題