2017-12-19 4 views
0

私は(2011年の周りに書かれた)いくつかのPythonコードに取り組んでおり、次のようにグローバルなVARを維持し、次の行を実現した。どのような場合でもsys.modules ['__ builtin__']を使用してデータを保存するのは誰ですか?

setattr(sys.modules['__builtin__'], 'globalVarTest', 123) 

をして、私は思っていた後に

getattr(sys.modules['__builtin__'], 'globalVarTest') 

それにアクセスなぜグローバルに存在する必要があるデータを保持するために、クラスメンバー変数を持つクラスを使用しないでください。それとも私は完全に無知で、その背後にある魔法を見ないのですか?

+8

これはひどくひどい考えのように見えます。 –

+1

これはThe Daily WTFの候補のようです。 – ekhumoro

答えて

1

野生のケースをお探しの場合は、from cpython itself(インタラクティブステートメントを評価して表示した後にグローバル変数_を設定する)です。

対話的インタプリタを実行しているときに呼び出される - 例えば:

>>> 999 * 999 
998001 
>>> _ 
998001 
>>> import builtins 
>>> builtins._ 
998001 

は、一般的にいえ言えば、あなたは決しては、ライブラリ/アプリケーションでこれを行う必要があります。魔法のスーパーグローバルを追加すると、linterを混乱させるだけでなく、ある種のものが組み込み関数として存在することを期待する将来の保守者も混乱させます。

+0

アンソニーありがとう、それは良い答えです。これまで私はそれを見たことがなかった。それは実際に生産コードO_oに入っていた。 – user1767754

関連する問題