Python 如何使用字符串列表作为变量名/对象属性?
我想做的是在创建对象时将字符串列表用作对象的属性。我看到另一个主题讨论通过创建字典将字符串列表用作变量,但这似乎将字符串保留为字符串,我认为这对我不起作用。这是我想要的工作。这是一个DnD练习: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
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也是一个全局变量,包含对类的引用。我不知道。我把它作为一个练习来做,所以它必须通过他们的测试,我认为这是为了寻找具体的东西。我不确定字典是否有用。我不知道。我把它作为一个练习来做,所以它必须通过他们的测试,我认为这是为了寻找具体的东西。我不确定字典是否有用。