繁体   English   中英

如何在变量名中使用变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM