在我基于文本的RPG中,我有一个具有各种属性的玩家类,其中一个是self.abilities
,这是一个存储静态能力的列表。
class Player(object):
def __init__(self):
self.strength = 5
...
self.abilities = []
...
self.strength
是另一个玩家价值的示例。
在这个程序中,我有另一个名为Ability
的类,它存储影响self.strength
等基本玩家值的信息。它有一个类方法,可以生成添加到播放器类的功能。
class Ability(object):
# `ability_names` lists ALL of the base player values that can be
# modified by an ability.
ability_names = ['strength', 'intelligence', 'dexterity', 'defense',
'endurance', 'block', 'faith', 'sorcery', 'speech', 'luck', 'health',
'stamina', 'mana', 'equip load']
def __init__(self, name, buff, descripton):
self.name = name
self.buff = buff
self.descripton = descripton
@classmethod
def generate(cls, player):
name = choice(cls.ability_names) + ' ' + 'buff'
buff_amt = randint(1, player.level * 3)
buff = {name: buff_amt}
description = 'This ability applies a buff of {} to your {} attribute'.format(buff_amt, name)
return cls(name, buff, description)
为了举例,我们假设我们使用Ability
方法将self.abilities
实例附加到玩家的Ability.generate()
列表值,并声明self.buff
值等于{{ 1}}。如果是这种情况,我该如何编写一个从{'strength': 3}
实例的Ability
字典中提取信息并将这些值应用于self.buff
类'属性的函数,或者更确切地说添加Player
到玩家的3
?