代码之家  ›  专栏  ›  技术社区  ›  Sasja Wijdenes

如何在不同类的实例上调用类方法\uu init__

  •  -1
  • Sasja Wijdenes  · 技术社区  · 3 年前

    我正在用python创建一个井字游戏。我正在尝试从我的Board类中对类中的boardState对象调用update方法 初始化 轮到我上课了。 当我运行它时 NameError: name boardState is not defined .

    
    class Board:
        def __init__(self, player1 =  "player1", player2 = "player2"):
            self.p1 = player1
            self.p2 = player2
            self.matrix = MATRIX
            self.winner = 'none'
            self.available = getAvailable(self.matrix)
            
        def update(self):
            clear()
            getAvailable(self.matrix)
            self.show()
    
    class Turn:
            def __init__(self, sym):
                self.sym = sym
                boardState.update()
                terminalState(boardState, self.sym, available)
                print(f"{self.sym}'s turn:")
    
    def main():
        boardState = Board()
        altTurns()
    
    
    2 回复  |  直到 3 年前
        1
  •  0
  •   Ohad Sharet    3 年前

    如果您在引用之前没有定义“boardState”,则会出现此错误,

    在使用之前,需要将其设置为新的Board对象

    class Board:
        def __init__(self, player1 =  "player1", player2 = "player2"):
            self.p1 = player1
            self.p2 = player2
            self.matrix = MATRIX
            self.winner = 'none'
            self.available = getAvailable(self.matrix)
            
        def update(self):
            clear()
            getAvailable(self.matrix)
            self.show()
    
    class Turn:
            def __init__(self, sym):
                self.sym = sym
                boardState = Board() #the line I added
                boardState.update()
                terminalState(boardState, self.sym, available)
                print(f"{self.sym}'s turn:")
    

    这应该可以解决您的问题

        2
  •  0
  •   Samwise    3 年前

    如果你想 Turn 对象以访问 boardState 在中创建的对象 main() (和 main 从而可以访问更新的 boardState公司 ),您应该将其作为参数传入,以允许所有相关函数访问它。

    我假设 转动 创建人 altTurns 所以 备降转弯 本身应该获取一个可以用来创建初始 转动 .

    class Turn:
            def __init__(self, sym, boardState):
                self.sym = sym
                boardState.update()
                terminalState(boardState, self.sym, available)
                print(f"{self.sym}'s turn:")
    
    def altTurns(boardState):
        sym = None  # or something?
        turn = Turn(sym, boardState)
        # more turns happen?
    
    def main():
        boardState = Board()
        altTurns(boardState)
        # our boardState has now been updated by Turn()