这是一个为玩家分配符号的类。它应该接受一个 Action 并将该 Action 添加到玩家现有的 Action 库中。
class Player:
...: positions = []
...: def __init__(self,symbol):
...: self.symbol = symbol
...: def move(self,position):
...: self.position = position
...: self.positions.append(self.position)
我的问题是 positions 在不绑定(bind)到对象实例的意义上表现得“全局”,以证明:
>>>a = Player('x')
>>>b = Player('y')
>>>a.move(1)
>>>b.positions
[1]
请您参考如下方法:
当你说,
class Player:
positions = []
positions 将是一个类变量,该类的所有实例都使用同一个对象。你可以通过这个确认
player1, player2 = Player(), Player()
print player1.positions is player2.positions # True
print Player.positions is player1.positions # True
如果你想创建实例变量(为 Player 的每个实例创建单独的 positions 变量),你可以在 __init__ 中创建它功能。它是一个特殊的初始化函数,它获取当前的实际对象作为第一个参数。您可以创建 positions 变量并将其附加到该对象,如下所示
class Player:
def __init__(self):
self.positions = []
player1, player2 = Player(), Player()
print player1.positions is player2.positions # False
在这里,self 指的是新构造的对象,您正在通过 self.positions 在该对象中创建一个新变量,并且您正在通过一个空列表对其进行初始化
self.positions = []
因此,每当您创建 Player 的新实例时,self 将引用创建的新实例并创建新变量 positions在每个实例上,这意味着每个实例都有单独的 positions 变量。
无论何时调用move,您都不必在self 上创建新的position 变量。相反,你可以这样做
def move(self, position):
self.positions.append(position)
如果你使用的是 Python 2.x,最好使用新的样式类,就像这样
class Player(object):
def __init__(self):
self.positions = []
