2017-11-24 2 views
0

ich mit Attributen einer Klasse-Charakter haben:Wie Variable in Variablennamen verwenden

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 

Wie kann ich Variable play_level in den Attributen des Charakters nennen? Der Code, den ich schreibe, funktioniert nicht. Vielen Dank!

+0

Ich denke, Sie müssen Ebene Eigenschaft als dict erstellen. –

Antwort

3

Statt dem versuchen, einen Wörterbuch mit:

class Character(): 
    def __init__(self): 
     self.skillbylevel = { 
      10: 'aaa', 
      20: 'bbb', 
      30: 'ccc' 
     } 

player_level = 20 

hero = Character() 
print(hero.skillbylevel[player_level]) 
+0

Danke für die Antwort! –

2

getattr sollte dies für Sie tun. Es ermöglicht Ihnen, eine Zeichenfolge zu erstellen und das Attribut aus dem Objekt mit diesem Namen abzurufen.

attribute_name = level_int(player_level) + "_skill" 
print(getattr(Character, attribute_name)) 

Wenn attribute_name nicht der Name eines Attributs auf Ihrer Klasse ist, dann wird es AttributeError zu erhöhen wie es wäre, wenn Sie Character.not_an_attribute genannt, so behaviorally identisch es ist.

Sie können auch das Standardverhalten einer Ausnahme überschreiben, indem Sie getattr ein drittes Argument angeben;

getattr(Character, attribute_name, "No skill this level") 
+0

Vielen Dank für die Antwort! –

2

Während Sie Ihre Klasse so einrichten können, denke ich, eine einfache, lesbare Weise etwas so sein würde:

#! /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()) 

Hier speichern Sie die relevanten Instanzvariablen, das Qualifikationsniveau und die zu dieser Ebene gehörenden Fähigkeiten und stellen Klassenmethoden für die Interaktion mit diesen Daten bereit. Ich denke, dass die Verwendung eines Wörterbuchs, um die Fähigkeiten auf jeder Ebene zu definieren, sauberer ist, als eine unterschiedliche Instanzvariable für jede Fähigkeit zu definieren, weil es Ihnen die Möglichkeit bietet, die Fähigkeitsliste als Argument an die Klasse zu übergeben oder sie von einer externen Quelle zu lesen. wie eine Datenbank, Datei, etc.

+0

Vielen Dank für die Antwort! –

+0

Gern geschehen. – Clinton

Verwandte Themen