10

次のように、クラス内からグローバル変数を宣言しようとしています。

class myclass:
    global myvar = 'something'

クラスの外からアクセスする必要がありますが、クラスファイルの外で宣言する必要はありません。私の質問は、これは可能ですか? もしそうなら、構文は何ですか?

4

6 に答える 6

15

あなたの質問では、「メインファイルの外」を指定しています。「クラス外」という意味ではない場合、これはモジュールレベルの変数を定義するために機能します。

myvar = 'something'

class myclass:
    pass

次に、クラスと変数の定義が というモジュールにあると仮定して、実行できますmymodule

import mymodule

myinstance = myclass()
print mymodule.myvar 

また、@ phihag の回答に対するコメントに応じて、次のように修飾されていない myvar にアクセスできます。

from mymodule import myvar

print myvar

クラスで定義しながら、別のファイルから簡単にアクセスしたい場合:

class myclass:
    myvar = 'something'

次に、アクセスする必要があるファイルで、ローカル名前空間に参照を割り当てます。

myvar = myclass.myvar

print myvar
于 2012-04-09T16:33:40.723 に答える
5

あなたは好きにすることができます

# I don't like this hackish way :-S
# Want to declare hackish_global_var = 'something' as global
global_var = globals()
global_var['hackish_global_var'] = 'something'
于 2012-04-09T16:43:48.370 に答える
5

これが本当に必要かどうかを再考する必要があります。プログラムを構成する方法が奇妙に思えます。より正しい phihag の方法を使用する必要があります。

それでもこれをやりたい場合は、次の方法があります。

>>> class myclass(object):
...     global myvar
...     myvar = 'something'
...
>>> myvar
'something'
于 2012-04-09T16:37:47.437 に答える
2

クラスにプロパティを割り当てるだけです。

class myclass(object):
   myvar = 'something'

# alternatively
myclass.myvar = 'else'

# somewhere else ...
print(myclass.myvar)
于 2012-04-09T16:30:19.390 に答える
2

あなたの質問に答えるために

global s
s = 5

やります。ただし、クラスのどこでこれを行うかによって、問題が発生します。必要な動作を得るために、関数から離れてください。

于 2012-04-09T16:38:43.567 に答える