Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用字符串列表作为变量名/对象属性?_Python_Class_Object_Variables_Attributes - Fatal编程技术网

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

Python 如何使用字符串列表作为变量名/对象属性?,python,class,object,variables,attributes,Python,Class,Object,Variables,Attributes,我想做的是在创建对象时将字符串列表用作对象的属性。我看到另一个主题讨论通过创建字典将字符串列表用作变量,但这似乎将字符串保留为字符串,我认为这对我不起作用。这是我想要的工作。这是一个DnD练习: abilities = ['strength', 'dexterity', 'constitution', 'intelligence', 'wisdom', 'charisma'] class Character: def __init__(self): for abili

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

谢谢

使用
setattr

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

使用
setattr

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

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

类字符:
定义初始化(自):
self.abilities={ability:roll_ability()表示能力中的能力}
def获得能力得分(自我、能力):
回归自我。能力[能力]
def保存掷骰(自身、能力、奖金=0):
返回骰子(20)+自我能力[能力]+加成

由于这是一款D&D游戏,您可能还需要动态访问能力分数;例如,
saving\u throw
方法可以使用您用于掷骰的技能的名称。在这种情况下,使用字典而不是单独的属性通常是更好的设计:

类字符:
定义初始化(自):
self.abilities={ability:roll_ability()表示能力中的能力}
def获得能力得分(自我、能力):
回归自我。能力[能力]
def保存掷骰(自身、能力、奖金=0):
返回骰子(20)+自我能力[能力]+加成

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

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)

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

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)

这几乎肯定有一个复制品,但我很难找到一个好的。也许吧,但我自己也不确定是否要把它作为一个复制品来结束。几乎可以肯定有一个复制品,但我很难找到一个好的。也许吧,但我自己不太确定是否要将其作为副本关闭。使用全局变量,特别是在类初始化中,这是一种不好的做法。假装
abilities=self。abilities
是第一行,而
Character.abilities
是一个类属性。或者假装
abilities
被命名为
abilities
,表示它应该用作常量。全局变量只有在它们不是常量时才是不好的做法<例如,code>Character也是一个全局变量,包含对类的引用。使用全局变量,特别是在类初始化中,这是一种不好的做法。假装
abilities=self。abilities
是第一行,而
Character.abilities
是一个类属性。或者假装
abilities
被命名为
abilities
,表示它应该用作常量。全局变量只有在它们不是常量时才是不好的做法<例如,code>Character也是一个全局变量,包含对类的引用。我不知道。我把它作为一个练习来做,所以它必须通过他们的测试,我认为这是为了寻找具体的东西。我不确定字典是否有用。我不知道。我把它作为一个练习来做,所以它必须通过他们的测试,我认为这是为了寻找具体的东西。我不确定字典是否有用。