对不起长标题,我不能把我的错误写进一个简短的短语。无论如何,代码不会抛出任何异常,只是我注意到的错误。我正在创建一个简单的基于文本的python游戏,以获得继承流和诸如此类的东西。在我的chara类(用于初始化字符变量的类)中我有一个空数组设置一个名为equiptedlist的类变量。我创建了一个函数,将一个项添加到该数组并返回它。我的错误是如果我装备一把剑到chara bob,那么我程序中的所有其他chara变量也将配备一把剑。这是我的代码,提前谢谢!
class Chara():
"""Class used to initialize new characters, including player, NPC's, enemies
and animals. inventory value should be a dictionary i.e. {Gold:50,
weapons:[sword, bow]} IMPORTANT, all chara object variables must have
backpack as
as their inventory array key"""
equiptedlist = []
def __init__(self, hp, speed, name, inventory, isenemy, isplayer):
self.hp = hp
self.speed = speed
self.name = name
self.inventory = inventory
self.isenemy = isenemy
self.isplayer = isplayer
def gethp(self):
return self.hp
def getspeed(self):
return self.speed
def getname(self):
return self.name
def getinv(self):
return self.inventory
#gets whether the char is an enemy or not
def enemy(self):
return self.isenemy
#gets whether the char is a player or not
def player(self):
return self.isplayer
def sethp(self, newhp):
self.hp = newhp
return self.hp
def setspeed(self, newspeed):
self.speed = newspeed
return self.speed
def setname(self, newname):
self.name = newname
return self.name
def setinv(self, newinv):
self.inventory = newinv
return self.inventory
#sets whether the char is an enemy or not
def setenemy(self, enemy):
self.isenemy = enemy
return self.isenemy
#sets whether the char is a player or not
def setplayer(self, player):
self.isplayer = player
return self.isplayer
#picks up an item
def pickup(self, item):
self.inventory.setdefault("backpack", []).append(item)
return self.inventory
#returns a boolean value to check if the item is in the charas inventory
def has(self, item):
for key in self.inventory.keys():
if item in self.inventory[key]:
return True
else:
return False
#returns new enemy hp after an attack
def attack(self, enemy, weapon):
enemy.sethp(enemy.gethp() - weapon.getdmg())
return enemy.gethp()
#equipts an item to the player
def equipt(self, item):
self.equiptedlist.append(item)
return self.equiptedlist
#checks if an item as equipted
def isequipted(self, item):
for i in self.equiptedlist:
if item == i:
return True
else:
return False
答案 0 :(得分:0)
Here is the python doc that explains why every Chara equips sword.
一般来说,实例变量用于每个实例的唯一数据,而类变量用于所有类实例共享的属性和方法:
class Chara():
equipped = [] # class variable shared by all instances
def __init__(self, name):
self.name = name # instance variable unique to each instance
self.equipped = [] # instance variable unique to each instance
def equip(self, item):
self.equipped.push(item)
>>> d = Chara('Thor')
>>> d.equip('Mjolnir')
>>> e = Chara('Tony Stark')
>>> e.equip('Mark I')
>>> d.equipped # Thor unique equipped items
['Mjolnir']
>>> e.equipped # Ironman unique equipped items
['Mark I']
>>> Chara.equipped # Shared equipped items
['']