我有以下代码:
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数组,我应该这样做:
class Player:
def __init__(self, username, trip, model, aGame):
self.username = username
self.trip = trip
self.hp = 100
self.aGame = aGame
#### 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 self.aGame['rooms']:
if room['ref'] == self.loc:
for acsroom in room['acs']:
if acsroom == dest:
self.loc = dest
return True
return False
或者这样做会更好:
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值使用相同的Player实例.如果只有一个值,那么我会将它传递给构造函数(你的选项2)或使用gnibbler的想法使它成为一个类变量.我可能赞成将它传递给构造函数以便于测试.
如果您希望同一个Player实例可用于多个aGame值,那么选项3可能是实现该目标的最简洁方法.
标签:python,oop,dictionary,global,class
来源: https://codeday.me/bug/20190630/1340332.html