gpt4 book ai didi

python - 您可以通过同名的字典键更新实例变量吗?

转载 作者:行者123 更新时间:2023-12-01 06:28:28 25 4
gpt4 key购买 nike

我想知道是否有一种聪明的方法可以通过将变量名称与字典中的键进行比较来更新实例变量。一开始我有这样的想法,不太精炼:

示例:1

class Warrior:
def __init__(self, name, **bonus_attributes):
self.health = 1000
self.damage = 100
self.enrage = False

for key, value in bonus_attributes.items():
if key == "health":
self.health += value
elif key == "damage":
self.damage += value
elif key == "enrage":
self.enrage = value
else:
continue


olaf = Warrior("Olaf")
print(olaf.__dict__)

gorm = Warrior("Gorm", health = -500, damage = 100, enrage = True)
print(gorm.__dict__)

它确实解决了我的问题,但我必须为传递给实例的每个关键字参数添加比较。然后我的 friend 告诉我,将实例变量也存储在单个字典中是个好主意,如下所示:

示例:2

class Warrior:
def __init__(self, name, **bonus_attributes):
self.variables = {
"health": 1000,
"damage": 100,
"enrage": False
}

for key, value in bonus_attributes.items():
if key in self.variables:
if isinstance(value, bool):
self.variables[key] = value
else:
self.variables[key] += value


olaf = Warrior("Olaf")
print(olaf.__dict__)

gorm = Warrior("Gorm", health = -500, damage = 100, enrage = True)
print(gorm.__dict__)

这使得比较变得容易,我认为这很可能是解决我的问题的最正确的方法。但是,我仍然很好奇是否有一种方法可以坚持第一个示例,其中实例变量是单独声明的。我只需要使 for 循环的第二个示例适用于这些单独的声明。

我应该保留 friend 建议的第二个实现,还是有办法修改我的第一个示例,使其与两个字典一样容易比较?

最佳答案

如果您知道想要编辑的每一项内容(如上所述),只需在构造函数中将它们定义为可选参数即可:

class Warrior:
def __init__(self, name, health=None, damage=None, enrage=None):
self.health = 1000 + (health or 0)
self.damage = 100 + (damage or 0)
self.enrage = enrage or False

olaf = Warrior("Olaf")
print(olaf.__dict__)

gorm = Warrior("Gorm", health = -500, damage = 100, enrage = True)
print(gorm.__dict__)

如果出于某种原因您不想这样做,我会推荐示例 2 中的字典方法。

关于python - 您可以通过同名的字典键更新实例变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60018760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com