2016-03-19 8 views
1

どのようにそれを語っているのかよく分かりませんが、ここで取り引きしています。私はすべての変数がグローバルに定義されているスクリプトを持っていますが、後でスクリプトをより優れたカプセル化のクラスに変換したいと思います。Pythonのクラス変数の名前を変更せずに

ただし、スクリプトで使用したすべての変数をオブジェクト変数に変換する必要があります。私は

self.x = 5 

x = 5 

のようなものを変更しているだろうし、スクリプト内のすべての関数は、クラスのメソッドになってする必要があることを行った後、しかし、方法のほとんどは数式です、および

z = x ** y + x 

のようにきれいなものをリファクタリング

は、わかりやすく痛いです。

だから、これに対する解決策として、私はメソッドの先頭で再命名これらは本当に厄介を入力してきた:

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

それは数式が読みやすくなりますが、すべてが再ネーミングを入力すると、本当に痛いですこれを行うもっとエレガントな方法はありますか?

答えて

3

selfは、推奨される名前です。私はあなたがそれを使用することをお勧めしますが、いくつかのケースではそれを短縮する方が良いです。

class A: 
    x = None 
    y = None 

    def calculate_z(s): 
     return s.x ** s.y + s.x 

foo = A() 
foo.x = 4 
foo.y = 2 
foo.calculate_z() # 20 

楽しい事実:®(Python 3の場合)のようなユニコード文字を使用することもできます。

​​
0

他にも解決策があるかもしれませんが、せいぜい醜いハックです。あなたはしかし、複数の割り当てを使用して、コードはおそらくそれほど厄介なことができます :後者はすべてのために高価な属性のルックアップが必要になるため、さらにxy

x, y = self.x, self.y 

は、self.xself.yよりもCPythonの中で使用する高速ですつかいます。

関連する問題