Python 交换一个类的两个实例

Python 交换一个类的两个实例,python,python-3.x,class,instance,swap,Python,Python 3.x,Class,Instance,Swap,在上面的代码中,我正在编写程序,使用python chess模块在chess引擎之间进行匹配。在这行代码中 #!/usr/bin/python import chess.uci import chess import chess.pgn import chess.svg def set_engine(engine_path): engine = chess.uci.popen_engine(engine_path) engine.uci() engine.ucinewg

在上面的代码中,我正在编写程序,使用
python chess
模块在chess引擎之间进行匹配。在这行代码中

#!/usr/bin/python
import chess.uci
import chess
import chess.pgn
import chess.svg

def set_engine(engine_path):
    engine = chess.uci.popen_engine(engine_path)
    engine.uci()
    engine.ucinewgame()
    return engine

def chess_match(engine1,engine2):
    while not board.is_game_over():
        engine1.position(board)
        engine1_move,ponder= engine1.go(movetime=100)
        board.push(engine1_move)
        engine2.position(board)
        engine2_move,ponder= engine2.go(movetime=100)
        board.push(engine2_move)

    print(engine1.name ," - ", engine2.name, board.result())


board = chess.Board()
start = board.set_fen(chess.STARTING_FEN)

engine1 = set_engine(".../Chess Engines/andscacs.exe")
engine2 = set_engine(".../Chess Engines/stockfish_18102108_x64_modern.exe")

for _ in range(6):
    chess_match(engine1,engine2)
    engine1, engine2 = engine2, engine1

我想在引擎之间进行6场比赛,他们每场比赛都会交换对手
engine1
engine2
chess.uci.Engine
类的实例。在我尝试该代码后,每次的结果都是相同的,这意味着发动机没有切换。浏览之后,我意识到不能通过元组解包来交换一个类的两个实例。我已经读过同样的问题,但仍然不知道如何编写swap方法。我在Windows 10中使用的是Python 3.6。

这不完全是您想要的解决方案,但是添加另一个bool变量来确定应该启动哪个引擎怎么样

for _ in range(6):
    chess_match(engine1,engine2)
    engine1, engine2 = engine2, engine1

您从
打印(engine1.name,“-”,engine2.name,board.result())
中得到的输出是什么?您的问题中有太多不相关的代码。请阅读。你不应该在每场比赛之前重置棋盘吗?交换似乎很好,因为它代表了第一场比赛之后的每场比赛,
board.is\u game\u over()
将立即返回true,因此
chess\u match()
实际上除了打印结果之外什么都不做。您需要在每次匹配之间重置电路板和引擎状态。
swap = False
for _ in range(6):
    chess_match(swap and engine2 or engine1, swap and engine1 or engine2)
    swap = not swap