如何使用字符串列表作为变量名/对象属性?

2024-05-23 18:01:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做的是在创建对象时将字符串列表用作对象的属性。我看到另一个主题讨论通过创建字典将字符串列表用作变量,但这似乎将字符串保留为字符串,我认为这对我不起作用。这是我想要的工作。这是一个DnD练习:

abilities = ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma']


class Character:
    def __init__(self):
        for ability in abilities:
            self.ability = roll_ability()       #this is a call to an outside function

谢谢


Tags: 对象字符串self主题列表字典属性strength
3条回答

因为这是D&;D游戏,您可能也需要动态访问能力分数;例如,一个saving_throw方法可以使用您用来滚动saving throw的能力的名称。在这种情况下,使用字典而不是单独的属性通常是更好的设计:

class Character:
    def __init__(self):
        self.abilities = { ability: roll_ability() for ability in abilities }

    def get_ability_score(self, ability):
        return self.abilities[ability]

    def saving_throw(self, ability, bonus=0):
        return roll_dice(20) + self.abilities[ability] + bonus

这是避免使用全局变量的另一个选择:

class Something:

    def __init__(self, *args):
        for ability in args:
            setattr(self, ability, roll_ability())


abilities = ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma']
s = Something(*abilities)

使用setattr

def __init__(self):
    for ability in abilities:
        setattr(self, ability, roll_ability())

相关问题 更多 >