python无实例更改变量类
我是一个Python初学者,目前正在使用类开发一个Tic-Tac-Toe游戏。事实上,我故意使用这些类是为了得到一些练习,即使避免使用它们是有意义的 以下是部分代码: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):
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
不是一个合适的对象。。。