【发布时间】:2018-10-08 10:06:42
【问题描述】:
我在 python 中有一个类,用于具有名称、健康、力量、隐身、敏捷、武器和金钱属性的人物。我正在制作的游戏中有一家商店,用于增加具有特定项目的任何整数属性的值。每个整数属性都可以增加两个具有不同成本和增益强度的不同项目之一。我遇到的问题实际上是按数量增加属性并保存对象。
这是对象的代码:
class Figure:
def __init__(self, stats):
#create figure object
self.name = stats[0]
self.health = int(stats[1])
self.strength = int(stats[2])
self.stealth = int(stats[3])
self.agility = int(stats[4])
self.weapons = int(stats[5])
self.money = int(stats[6])
def show_person(self):
#show object attributes
print("\n\n{}\n\nHealth: {}\nStrength: {}\nStealth: {}\nCunning: {}\nWeapons: {}\nMoney: £{}".format(self.name.title(),self.health,self.strength,self.stealth,self.cunning,self.weapons, self.money))
def set_attr(self,attr,buff):
#increase character attribute by a variable amount
eval("self.{} = self.{} + {}".format(attr,attr,buff))
我可能会使用friend.set_attr("stealth",10) 将朋友的隐身值增加 10,其中朋友是包含这些 Figure 对象之一的变量,但会引发此错误:
File Computer Science\python\oop game.py", line 21, in set_attr
exec(eval("self.{} = self.{} + {}".format(attr,attr,buff)))
File "<string>", line 1
self.agility = self.agility + 4
^
SyntaxError: invalid syntax
我不知道为什么。
【问题讨论】:
-
您是否考虑过使用以属性名称为键的字典而不是多个变量?这样您就可以通过名称
self.attribs["agility"]而不是使用eval来访问这些值。 -
你为什么不直接做
friend.stealth = 10? -
回溯中的代码与问题中的代码不匹配。