import copy
from dlgo.gotypes import Player
class Move():
def __init__(self, point=None, is_pass=False, is_resign=False):
assert (point is not None) ^ is_pass ^is_resign # ^异或操作,这里assert断言三种情况有且仅有一种成立,如果不是这样则报错
self.point = point
self.is_play = (self.point is not None)
self.is_pass = is_pass
self.is_resign = is_resign
# @classmethod 类方法,该实例属于类,该方法的第一个参数是当前类,可以对类做一些处理,如果一个静态方法和类有关但是和实例无关,那么使用该方法
@classmethod
def play(cls, point):
return Move(point=point)
@classmethod
def pass_turn(cls):
return Move(is_pass=True)
@classmethod
def resign(cls):
return Move(is_resign=True)
代码来源:Deep_Learning_and_the_Game_of_Go Chapter3作者:MAX PUMPERLA
这里我们不会直接调用Move构造函数。而是,使用Move.play, Move.pass_turn, 或者 Move.resign来构造一个实例。所以这里使用@classmethod,这样我们就不用先实例化Move 为M1再调用M1.play了。