Klassenvariablen desselben Typs in Python

8

Wenn ich beim Python-Lernen mit dem typischen Point-Class-Beispiel experimentiert habe, ist mir aufgefallen, dass ich aus irgendeinem Grund keine Klassenstufe (statische Variable) vom selben Typ wie die Klasse haben kann. ZB

%Vor%

während das gleiche in Java funktioniert:

%Vor%

Die Frage ist: Gibt es einen Weg, das Gleiche in Python zu erreichen? Im Moment verlasse ich mich auf Variablen auf Modulebene und ich mag diese Lösung nicht. Gibt es auch einen Grund, warum es nicht im Körper der Klasse getan werden kann?

    
sasuke 06.12.2010, 18:45
quelle

4 Antworten

4

Sie können keine Instanz einer Klasse erstellen, bis diese Klasse tatsächlich erstellt wurde, dh nachdem der Klassenkörper ausgewertet wurde (Hinweis: Er wird wie normaler Python-Code ausgeführt).

Dasselbe gilt für Ihr Java-Beispiel: ClassLoader erstellt die Klasse Point und führt dann den Code aus den Feldern static aus.

Ein ungefähres Äquivalent zu einem Klassenlader in Python ist die Metaklasse, also könnten Sie etwas wie folgt machen:

%Vor%

Natürlich hat dies einige andere Konsequenzen, zB: Alle Unterklassen von Point haben ein eigenes ORIGIN -Attribut. Du willst es wahrscheinlich einfach so machen wie andere gezeigt:)

    
lqc 06.12.2010, 20:12
quelle
8
%Vor%     
Ignacio Vazquez-Abrams 06.12.2010 18:50
quelle
5

Ordne es nach der Tat zu:

%Vor%     
Karl Knechtel 06.12.2010 18:50
quelle
2

Du könntest das mit einem Klassenausstatter machen, obwohl ich nicht sicher bin, wie ein guter Name dafür wäre. Hier ist wie:

%Vor%

Obwohl im obigen Code nicht verwendet, können Sie auch Argumente indirekt über den Decorator an den __init__() -Konstruktor der Klasse übergeben.

    
martineau 06.12.2010 19:34
quelle

Tags und Links