[英]How to use variable in variable name
我有一类具有属性的角色:
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
如何在角色的属性中调用变量play_level? 我编写的代码无法正常工作。 谢谢!
相反,请尝试使用字典:
class Character():
def __init__(self):
self.skillbylevel = {
10: 'aaa',
20: 'bbb',
30: 'ccc'
}
player_level = 20
hero = Character()
print(hero.skillbylevel[player_level])
getattr
应该为您执行此操作。 它允许您构建一个字符串,并从具有该名称的对象中获取属性。
attribute_name = level_int(player_level) + "_skill"
print(getattr(Character, attribute_name))
如果attribute_name
不是类上属性的名称,则它将引发AttributeError
,就像您调用Character.not_an_attribute
,因此在行为上是相同的。
您还可以通过给getattr
第三个参数来覆盖引发异常的默认行为。
getattr(Character, attribute_name, "No skill this level")
虽然您可以通过这种方式设置类,但我认为更简单,更易读的方式将是这样的:
#! /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())
在这里,您将存储相关的实例变量,技能级别以及与该级别相关的技能,并提供与该数据进行交互的类方法。 我认为使用字典来定义每个级别的技能比为每个技能定义不同的实例变量更干净,因为它为您提供了将技能列表作为类的参数传递或从外部源中读取的灵活性,例如数据库,文件等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.