Как использовать список строк в качестве имен переменных / атрибутов объекта? - PullRequest
0 голосов
/ 21 января 2020

То, что я хотел бы сделать, это иметь список строк, которые будут использоваться в качестве атрибутов объекта при его создании. Я видел еще один топик c, обсуждающий использование списка строк в качестве переменных путем создания словаря, но кажется, что строки сохраняются в виде строк, что мне не подойдет, я не думаю. Вот что я хотел бы поработать. Это упражнение 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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 21 января 2020

Использование setattr:

def __init__(self):
    for ability in abilities:
        setattr(self, ability, roll_ability())
0 голосов
/ 21 января 2020

Это может быть еще один вариант для go без использования глобальных переменных:

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)
0 голосов
/ 21 января 2020

Поскольку это игра D & D, вероятно, вам также потребуется динамический доступ к показателям способностей; например, метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...