我有以下代码:
class Player:
def __init__(self, username, trip, model):
self.username = username
self.trip = trip
self.hp = 100
#### For player moving location/room ####
def Move(self, dest):
if dest == self.loc:
return True
# Check destination room is accessible from current room
for room in aGame['rooms']:
if room['ref'] == self.loc:
for acsroom in room['acs']:
if acsroom == dest:
self.loc = dest
return True
return False
aGame是一个在类外部定义的数组,因此此代码无法工作。 由于该类中可能有许多其他函数可能会使用aGame数组,因此我应该这样做:
^{pr2}$还是这样做更好:
class Player:
def __init__(self, username, trip, model):
self.username = username
self.trip = trip
self.hp = 100
#### For player moving location/room ####
def Move(self, dest, aGame):
if dest == self.loc:
return True
# Check destination room is accessible from current room
for room in aGame['rooms']:
if room['ref'] == self.loc:
for acsroom in room['acs']:
if acsroom == dest:
self.loc = dest
return True
return False
还是应该将aGame设为全局变量(如果是,如何,请注意这个类在另一个文件中)?在
因为aGame是一个到处都在使用的数组,所以在每个类中复制它似乎是不正确的。 我可能搞错了,我正在慢慢地学习OOP,谢谢你的帮助。在
每个实例的
aGame
是否相同? 然后你可以像这样把它变成一个类属性或者
^{pr2}$在类中,您仍然可以通过
self.aGame
访问它只有第一选择才有效。在第二个例子中,
for room in self.aGame['rooms']
将产生一个错误,因为任何地方都没有绑定到self。如果它是for room in aGame['rooms']
,那么它就可以工作了,但是每次调用move()
时,都必须不必要地传递给它。在您也可以使其成为一个全局变量,但最好让每个玩家持有一个aGame实例。如果需要重新更改并且有多个参与者,则应将其定义为全局变量。在
另外,只是吹毛求疵,但是
aGame
不是数组,而是字典。Python语言甚至没有数组(尽管有些扩展有数组)。在在我看来,第一个选择是正确的,因为它使用全局变量没有任何好的理由。所以在第二个和第三个之间选择。在
决定性的特性是您是否要对多个
aGame
值使用相同的Player
实例。如果只有一个值,那么我要么将其传递给构造函数(您的选项2),要么使用gnibbler将其作为类变量的思想。为了便于测试,我可能希望将它传递给构造函数。在如果您希望同一个
Player
实例可用于多个aGame
值,那么选项3可能是实现这一目标的最干净的方法。在相关问题 更多 >
编程相关推荐