2016-05-13 11 views
0

私のクラスではbackcard = self.backcardを定義しています。ただし、プログラムを実行してmain関数を実行すると、私は、backcard.isClickedが定義されていないというエラーが発生し続ける。私が定義したにもかかわらず、エラーバックカードが定義されていないままになっています

class MemoryGame(Deck, PlayingCard): 

    def __init__(self, fulldeck): 
     self.deck = Deck() 
     self.fulldeck = fulldeck 
     self.deck.shuffle() 

    def gameboard(self, win, xpos, ypos): 
     gameboard = self.gameboard 
     dealtCard = self.deck.dealCard() 
     suite = dealtCard.getSuite() 
     rank = dealtCard.getRank() 
     self.cardlist = [] 

     for rowsofcards in range(4): 
      backcard = Image(Point(xpos,ypos),"playingcards/b1fv.gif") 
      self.backcard = backcard 
      ypos += 130 
      xpos = 190 
      for rowsofcard in range(6): 
       rowsofcards = self.deck.dealCard() 
       randomsuite = rowsofcards.getSuite() 
       randomrank = rowsofcards.getRank() 
       cardimage = Image(Point(xpos,ypos),"playingcards/"+ (randomsuite) + str(randomrank) +".gif") 
       cardimage.draw(win) 
       backcard = Image(Point(xpos,ypos),"playingcards/b1fv.gif") 
       backcard.draw(win) 
       self.cardlist.append(backcard) 
       xpos += 100 
       self.backcard = backcard 
     self.backcard = backcard 

私は試したプレースメントを表示するために3つの異なる場所に書かれていますが、何も動作しません。そのコードの部分をforループの前に置くと、割り当て前にそのバックカードが参照されるようになります。これも私のメイン機能でエラーを取得している部分である。

while not Quitbutton.isClicked(p): 
     #Start Game 
     if StartGameButton.isClicked(p) and player == True: 

      if first == True: 
       Game.gameboard(win,110,6) 
       if backcard.isClicked(p): 
        backcard.undraw() 
       first = False 

       if StartGameButton.isClicked(p): 
        p = win.getMouse() 
        if backcard.isClicked(p): 
         backcard.undraw() 
         p = win.getMouse() 
+0

'main()'に 'Game.backcard'を使ってみましたか? – zondo

+0

_ backcard.isClickedが定義されていないというエラーが発生し続けます。 'backcard'は' Image'クラスのインスタンスです。 'Image'オブジェクトは' isClicked() '関数を持っていますか? –

+0

'class MemoryGame(Deck、PlayingCard)' - あなたは継承がどのように機能するかを誤って誤解しています。 – user2357112

答えて

0

最も可能性が高い何が起こっていることはgameboard()が呼び出される前に何かがMemoryGamebackcardプロパティを呼び出していることです。これは、__init__機能でself.backcardと設定することで確認できます。

本当にすべてのクラス変数は、コンストラクタで何かに初期化する必要があります。 None__init__に設定してみてください。エラーがNoneType has no attribute...に変更されていることがわかります。準備が整う前に、アクセスしようとしているものを追跡するのに役立ちます。

+1

いいえ、実際には、インスタンス属性の代わりにグローバル変数であるかのように 'backcard 'を使用しているという問題があります。 – zondo

+0

'__init__'部分に置くと、' NameError:name 'バックカード'が定義されていないにもかかわらずエラーが発生します。 –

0

gameboard方法では、あなたがループが、ローカル変数backcard = Image(Point(xpos,ypos),"playingcards/b1fv.gif")ために後self.backcard = backcardを呼び出しているが、ループのための内部を定義しています。 forループに入る前にそれを移動してみてください。

関連する問題