<p>您所面临的部分问题(可能是让您感到困惑的原因)是您试图使用类变量来保存消息,但实际上并没有修改它们。每当您键入<code>self.variable = something</code>时,您将被赋值给实例变量,即使存在同名的类变量。这是因为虽然您可以通过<code>self</code>访问类变量,但您不能这样分配给它们。你知道吗</p>
<p>可以通过将类变量更精确地命名为<code>GameRoom.variable</code>来避免这种情况,但是我建议完全避免类变量。除了常数,它们很少对任何东西有用。下面是如何设置实例变量的方法:</p>
<pre><code>class GameRoom(object):
def __init__(self):
self.message1 = ""
self.message2 = ""
# etc...
</code></pre>
<p>其余的代码可以相同(它已经在操作实例变量)。你知道吗</p>
<p>一旦你开始使用实例变量,你将遇到的麻烦是,你正在创建一个新的实例,你的类,每当你想访问他们的方法。也就是说,您的<code>GameRoom</code>一次又一次地创建一个新的<code>Player</code>实例,<code>Player</code>类在每次移动之后创建新的<code>GameRoom</code>实例。这通常不是你想做的。相反,您可能只想为它们中的每一个创建一个实例,并继续重用它们。你知道吗</p>
<p>@kuyan的回答说明了如何避免在<code>Player.Go</code>方法中创建一个新的<code>GameRoom</code>实例,但是您可能也希望避免创建大量的<code>Player</code>实例(特别是如果您稍后将在<code>Player</code>类中遇到任何复杂的情况)。你知道吗</p>
<p>我会做:</p>
<pre><code>def GameStatus(self):
player = Player() # create a Player instance in a local variable
# ...
if userDecision.upper() == "GO":
player.Go(self) # use the variable!
</code></pre>
<p>另一个选择是将播放器创建添加到<code>__init__</code>方法(将其分配给实例上的<code>self.player</code>或其他名称)。然后可以从<code>GameRoom</code>中的任意数量的方法访问相同的<code>Player</code>实例。或者您甚至可以将其作为<code>__init__</code>方法的参数,如果您希望相同的<code>Player</code>实例在不同的房间中可用。你知道吗</p>