嗨大家好我正在尝试使用Python(我发现了pygame.org并且想要玩游戏),我试图从配置文件中读取一些设置。我希望能够动态更改统计数据。 (所以,如果我想改变战斗机击中的难度或者向导运行的速度,那么我就能做到这一点。)我希望能够从列表中读取并为列表中的每个实例创建一个属性基本上这个:
for stat in Character.stats:
self.stat = parser.get(self.char_class, stat)
最终发生的事情是有一个对象,其属性名称'stat'包含分配的最后一个值。我想要发生的是为列表中的每个项目创建一个属性,然后从配置文件中分配相关的值。
这里有更多上下文代码:
class Character(object):
stats = ["level_mod",
"power",
"speed",
"hit",
"evade",
"magic",
"stamina",
"magic_defense",
"intelligence"]
def __init__(self, name, rpg_id):
self.name = name
self.rpg_id = rpg_id
self.__setStats()
def __setStats(self):
parser = SafeConfigParser()
parser.read('char_config.cfg')
for stat in Character.stats:
self.stat = parser.get(self.char_class, stat)
谢谢你的时间!
答案 0 :(得分:0)
您想要setattr(obj, attrname, value)
答案 1 :(得分:0)
你可以使用,setattr:
for stat in Character.stats:
setattr(self, stat, parser.get(self.char_class, stat))
或手动访问 dict
for stat in Character.stats:
self.__dict__[stat] = parser.get(self.char_class, stat))
答案 2 :(得分:0)
您最好通过添加Stats
类来重新设计游戏的这一部分。
class Stats:
STATS = ["level_mod",
"power",
"speed",
"hit",
"evade",
"magic",
"stamina",
"magic_defense",
"intelligence"]
def __init__(self, conf_file=None):
self.__stats = {}
if conf_file is not None:
self.loads_stats_from_file(conf_file)
def load_stats_from_file(self, conf_file):
"""
Here add the pairs <stat_name>:<value>
to the self.__stats dict. For that just parse the config
file like before.
"""
pass
def get_stat(self, stat_name):
return self.__stats[stat_name]
def set_stat(self, stat_name, value):
self.__stats[stat_name] = value
然后,您可以向Stats
添加Character
个实例。
class Character(object):
def __init__(self, name, rpg_id):
self.stats = Stats("char_config.cfg")
self.name = name
self.rpg_id = rpg_id
这样可以提高可用性并解除Stats
和Character
逻辑。此外,您的问题从“将属性添加到对象”减少到“将项目添加到字典”。