2017-11-10 2 views
1

Ich möchte eine Klasse erstellen, die eine Sammlung von farbigen Zeichen enthält, und ich möchte, dass sie wie eine statische Variable aussieht. Aber ich kann aus der Klasse Attribute nicht nennen @classmethod, das heißt die folgenden gibt mir Fehler (NameError: name 'Pegs' is not defined):Eine Klassenmethode im Klassenattribut aufrufen

class Color: 
    RED = '\033[31m' 

class Pegs: 
    PEG = '\u25A0' 
    PEGS = { 
     'red' : Pegs.generate_peg_from_color(Color.RED) 
    } 

    @classmethod 
    def generate_peg_from_color(cls, color): 
     return ''.join([color, Pegs.PEG]) 

Ist es möglich, eine Funktion in einem Klassenattribut zu nennen? Sollte ich den statischen Methodendekorator anstelle der Klassenmethode verwenden? Und warum erzeugt es diesen Fehler?

+1

Nein, das geht nicht; Pegs wird immer noch an dem Punkt definiert, an dem Sie versuchen, darauf zu verweisen. –

+0

Danke. Also muss ich manuell alle Farben definieren? – Liliane

Antwort

0
class Pegs: 

    PEG = '\u25A0' 

    @classmethod 
    def generate_peg_from_color(cls, color): 
     return ''.join([color, cls.PEG]) 

    PEGS = { 
     'red' : Pegs.generate_peg_from_color(Color.RED) 
    } 

Sie haben versucht, die Funktion aufzurufen, bevor sie definiert wurde. Jetzt können Sie es versuchen:

In [11]: Pegs.PEGS 
Out[11]: {'red': '\x1b[31m■'} 

UPDATE^

Was ist, wenn Sie eine solche Methode hinzufügen werden:

@classmethod 
def meth(cls): 
    cls.PEGS = { 
     'red': cls.generate_peg_from_color(Color.RED) 
    } 

und erreichen Sie Ihre Klasse danach Attribute? Wird das dein Problem lösen?

+0

Danke py_dude, aber das funktioniert nicht, wenn ich versuche es zu importieren. – Liliane

+0

@Liliane schau auf mein Update bitte –

+0

Nein, es wird nicht lösen (dann müsste ich die Klassenmethode aufrufen, oder ein Objekt instanziieren und dann Farben generieren. Aber ich möchte sie als statische Variablen haben), danke für die Hilfe, Aber je mehr ich darüber nachdenke, desto mehr denke ich, dass ich diese Frage löschen muss. – Liliane

Verwandte Themen