2016-05-11 7 views
0

私は、クラス変数にアクセスするためにMyLongAdvancedClassName._templateを入力するのに少し疲れています。それらは時々定数ですが、必ずしもそうではありません。あなたは、定数の場合にモジュールグローバルを使いたいと思うでしょう。しかし、私はファイルの始めではなく、使用場所の近くでそれらを定義したいと思っています。また、長い文字列の場合は、各呼び出しでそれを再割り当てするので、私は地元の人が好きではありません。Pythonで現在のクラス名に間接的にアクセスできますか?

は、次のような何かをすることが可能です:

_c = MyLongAdvancedClassName 

class MyLongAdvancedClassName: 
    ... 

    _template = " My long advanced text %i " 
    def method(self): 
     print _c._template 
+2

あなたはそれを行うことができますが、クラス定義の後に '_c = ...'行を移動する必要があります。 – BrenBarn

+1

私はいつも 'self._template'を使用しましたが、インスタンス変数がクラス変数に結びついていないということを理解しています。これらのクラス変数は私のための定数なので、私はまだどちらかを再割り当てする必要がないので、問題は発生していません。しかし、これが偽りの練習であるかどうかはわかりません。 –

答えて

3

あなたが代わりに現在のクラス名を使用するPythonで自己キーワードを利用することができます。

class MyLongAdvancedClassName: 
    ... 

    _template = " My long advanced text %i " 
    def method(self): 
     print self._template 

希望します。

2

あなたが探しているのはおそらく自己(サンの答えを見てください)です。 しかし、これにはクラスのインスタンスが必要です。 あなたはクラス自身でそれをやりたいなら、あなたはこのようなクラスメソッドのデコレータを使用することができます。

class MyLongAdvancedClassName: 
    ... 

    _template = " My long advanced text %i " 
    @classmethod 
    def method(cls): 
     print cls._template 
関連する問題