我有一个具有属性的类Character:
class Character():
def __init__(self):
self.level_10_skill = 'aaa'
self.level_20_skill = 'bbb'
self.level_30_skill = 'ccc'
player_level = '20'
print(Character.level_int(player_level)_skill) # Not Working
如何在Character的属性中调用变量play_level?我写的代码不起作用。谢谢!
答案 0 :(得分:2)
getattr
应该为你做这件事。它允许您构建一个字符串,并使用该名称从该对象中获取该属性。
16sp
如果attribute_name = level_int(player_level) + "_skill"
print(getattr(Character, attribute_name))
不是您班级中某个属性的名称,那么它会引发attribute_name
,就像您调用AttributeError
一样,所以行为它是相同的。
您还可以通过向Character.not_an_attribute
提供第三个参数来覆盖异常的默认行为;
getattr
答案 1 :(得分:2)
虽然你可以这样设置你的课程,但我认为更简单,更易读的方式是这样的:
#! /usr/bin/env python
class Character():
def __init__(self, level):
self.skill_level = level
self.skills = {
10: 'aaa',
20: 'bbb',
30: 'ccc'
}
def set_skill_level(self, skill_level):
self.skill_level = skill_level
def get_skill_level(self):
return "You are currently at skill level {0}".format(self.skill_level)
def get_skill(self):
return "Your skill is {0}".format(self.skills[self.skill_level])
if __name__ == "__main__":
my_character = Character(20)
print(my_character.get_skill_level())
print(my_character.get_skill())
在这里,您将存储相关的实例变量,技能级别以及与该级别相关的技能,并提供与此数据交互的类方法。我认为使用字典来定义每个级别的技能比为每个技能定义不同的实例变量更简洁,因为它为您提供了将技能列表作为参数传递给类或从外部源读取的灵活性,例如数据库,文件等