python无实例更改变量类

python无实例更改变量类,python,python-3.x,Python,Python 3.x,我是一个Python初学者,目前正在使用类开发一个Tic-Tac-Toe游戏。事实上,我故意使用这些类是为了得到一些练习,即使避免使用它们是有意义的 以下是部分代码: import sys class Build_board(): boardg = [] num_of_rows = 3 num_of_cols = 3 def generate(self): for x in range(self.num_of_rows):

我是一个Python初学者,目前正在使用类开发一个Tic-Tac-Toe游戏。事实上,我故意使用这些类是为了得到一些练习,即使避免使用它们是有意义的

以下是部分代码:

import sys


class Build_board():
    boardg = []
    num_of_rows = 3
    num_of_cols = 3
    def generate(self):
        for x in range(self.num_of_rows):
            self.boardg.append(['0' for x in range(self.num_of_cols)])

    def print_board(self):
        for row in self.boardg:
            print(" ".join(row))

class Players(object):
    name = ""
    score = 0
    players_dic = {}
    def ask_name(self):
        for i in range(2):
            self.name = input("What's {plyr} player's name? ".format(plyr="first" if i == 0 else "second"))
            self.players_dic["p" + str(i+1) + "_name"] = self.name
            self.players_dic["p" + str(i+1) + "_score"] = self.score


class Players_turn(Players): #PROBLEM HERE

    def __init__(self, turn):
        self.turn = turn

    def whos_turn(self):
        if self.turn % 2 == 1:
            return self.players_dic['p1_name'], '1'
        elif self.turn % 2 == 0:
            return self.players_dic['p2_name'], '2'
        else:
            return 'incorrect', '3'
上面的Players'turn()类用于根据当前的回合数返回应该进行回合的玩家

if __name__ == '__main__':

    turn = 0
在此处创建的Turn变量

    board = Build_board()
    board.generate()

    players = Players()
    players.ask_name()
    pdic = players.players_dic

    players_turn = Players_turn(turn)
    who_now = players_turn.whos_turn()


    def game():
        for round in range(3):
            while True:
                global turn 
                turn += 1 
                players_turn = Players_turn(turn) 
                print("Turn", turn)
                if ['0' in list_ for list_ in board.boardg]:
                    print("It's", players_turn.whos_turn()[0] + "'s turn.") 
                else:
                    return False
        sys.exit()

game()
在game()函数中,我重新定义变量turn并在每回合增加1,然后创建一个Players_turn()类的实例,以更改turn变量的值,以便类中的“whos_turn()”可以返回不同的玩家。 我知道在不使用全局变量的情况下有更好的方法

我的问题是:
是否有其他方法可以更改类/类实例中的变量值,而不使用同一类的新实例创建/覆盖它?

不是真正解决您的问题,但是。。。您的抽象可以使用一些改进。用一个对象而不是一个方法来表示一个动作(一个回合,构建一个棋盘)是有问题的。
Players\u turn所拥有的数据是一个游戏类应该拥有的数据。如果您试图实践/应用OOP,请首先从合理的抽象开始。这会让你遇到的问题更容易解决。
Player\u turn
不是一个合适的目标…不是真正解决你的问题,而是。。。您的抽象可以使用一些改进。用一个对象而不是一个方法来表示一个动作(一个回合,构建一个棋盘)是有问题的。
Players\u turn所拥有的数据是一个游戏类应该拥有的数据。如果您试图实践/应用OOP,请首先从合理的抽象开始。这会让你遇到的问题更容易解决。
Player\u turn
不是一个合适的对象。。。