2016-03-19 4 views
1

Nicht sicher, wie man es richtig ausdrückt, aber hier ist der Deal. Ich habe ein Skript, in dem jede Variable global definiert ist, aber später möchte ich das Skript in eine Klasse für eine bessere Kapselung konvertieren.Umbenennen von Klassenvariablen in Python ohne das Selbst

Alle Variablen, die ich im Skript verwendete, müssen jedoch in Objektvariablen konvertiert werden. Ich habe so etwas wie

x = 5 

in

self.x = 5 

Und nach tun, dass alle Funktionen im Skript gedreht werden muss, in Methoden der Klasse geändert würde, jedoch sind die meisten Methoden mathematische Formeln und

z = x ** y + x 

in

etwas so sauber wie

Refactoring

wirklich tut weh Lesbarkeit.

So als Lösung für diese Ich habe diese wirklich peinlich Umbenennung zu Beginn der Methoden eingeben:

def method(self, ...): 
    x = self.x 
    y = self.y 
    ... 

Es macht die Formeln lesbar, aber die Eingabe all das Umbenennung ist wirklich schmerzhaft Gibt es einen eleganteren Weg dies zu tun?

Antwort

3

self ist nur ein vorgeschlagener Name. Ich würde Sie ermutigen, es zu verwenden, aber in einigen Fällen ist es besser, es zu verkürzen.

Fun Tatsache: Sie könnten sogar Unicode-Zeichen verwenden, wie ® (in Python 3, das ist).

def calculate_z(®): 
    return ®.x ** ®.y + ®.x 
0

Nun, es könnte einige andere Lösungen geben, aber sie sind alle nur hässliche Hacks. Sie können den Code machen möglicherweise weniger umständlich durch obwohl Mehrfachbelegung mit:

x, y = self.x, self.y 

Zusätzlich x und y schneller in CPython zu verwenden, als self.x und self.y, weil die letzteren für jeden eine teure Attribut Lookup benötigen würde benutzen.