2017-05-31 2 views
0

明示的にクラス名を使用せずにクラス変数にアクセスする方法はありますか?この静的変数にアクセスするためにクラス名を使用

static_variable = 'stuff' 

className = CLASS 

def method (self): 
    className.static_variable 

よう

何かが、これは簡単な方法で可能ですか?

回答

self.static_variable または __CLASS __。誰もが、この答えを探して、静的およびインスタンス変数を混​​合することは良い考えであるかどうかを一瞬のために無視するために

+1

あなたは 'self.TABLE'をやっている特別な理由は何ですか? – user2357112

+0

あるいは '__class __。TABLE'、とにかく魔法の' __class__'クロージャー変数に頼っているのであれば? – user2357112

+2

thumpのルールとして、クラスの中でクラスの名前を知る必要はありません(ただし、python-2.xでは 'super'、' __repr__'や '__str__'では例外)。あなたのクラスの名前が必要なときはいつでも、より良い/より簡単な方法があります。 – MSeifert

答えて

0

static_variable。

これには2つの簡単な方法があります。

最初の方法インスタンス変数はクラス .static_variable使用して、またはインスタンス限り self.static_variableを使用してアクセスすることができる

class MyClass(): 
    static_variable = 'VARIABLE' 

    def __init__(self): 
     self.instanceVariable = 'test' 

    def access_static(self): 
     print(self.static_variable) 

class MyClass(): 
    static_variable = 'VARIABLE' 

    def __init__(self): 
     self.instanceVariable = 'test' 

    def access_static(self): 
     print(__class__.static_variable) 

第二の方法self.static_variableの変数がコードのどこかに定義されていません。それをやって私の好ましい方法は、単に_class_代わりのClassName.static_variablestatic_variableを付加することですので、自己が、あなたがが、静的変数またはインスタンス変数にアクセスしているかどうかが、それがあいまいになるだろう使用

+2

静的変数の呼び出しをやめてください。それらはクラス変数と呼ばれます。特に静的なものは何もありません。 – chepner

+0

@chepnerあなたが何をしているかを知っている限り、あなたがそれを何と呼んでも問題はありません。私は前後に、MATLAB、Simulink、Python、C、C++、時にはJava間を行きます。それらのすべてが、これらのコンセプトを異なるものと呼んでいます。名前の重要性が十分に強調されていない。 – Rethipher

+0

それは非常に重要です。たとえば、静的メソッドとクラスメソッドには大きな違いがあります。 *あなたは静的変数の意味を知るかもしれません。他人が引き受けるとは思わないでください。 – chepner

関連する問題