pythonのドキュメントとさまざまなメーリングリストを読んでいるとき私はいつもドグマのようなものを読んでいます。グローバル変数は地獄のように避けなければなりません、彼らは貧しいデザインです... OK、なぜですか?しかし、私はそのようなパターンを避ける方法がない現実の生命の状況があります。グローバル変数を避ける方法
メインメニューからいくつかのファイルをロードできるGUIがあるとします。 ロードされたファイルに対応するファイルオブジェクトは、すべてのGUI(例えば、画像を表示する画像ビューア、および様々なダイアログ/プラグインを介して様々なアクションを実行することができる)を超えて使用することができる。 >ロードされたファイルオブジェクトを使用することができます - >ファイルはここに
- Menu.py:
は、次のような設計を構築すると、本当に間違って何かがありますここ
- Dialog1.py - >またはここ
- Dialog2.py - >またはそこ
- Dialog3.py - >またはそこ
- ...
- Globals.py Globals.pyは、キーロードされたファイルの名前と値を、対応するファイルオブジェクトである辞書を格納する
。そこから、それらのデータを必要とするコードのさまざまな部分が弱い参照を介してアクセスします。
申し訳ありません私の質問が愚かに見えますが、エレガントでグローバルな選択肢はありませんか? 1つの方法は、ロードされたデータ辞書をMain.pyのメインアプリケーションクラスに、GUIの中央アクセス部分とみなしてカプセル化することです。しかし、このクラスは、必要な直接の子どもであっても、データを必要とするすべてのダイアログから簡単にアクセスできるようにするために、いくつかの複雑な問題もあります。
は、彼らがコードの再利用を阻害するので
グローバル変数は悪ではありません。変数として悪を使っているのは悪です。グローバル変数は静的であり、可能な限り「不変」でなければなりません。 globals.pyで辞書の内容を変更する必要がある場合は、うまくいきません。それ以外は、読書は大丈夫です。 – CppLearner
はい、グローバルな「定数」は大丈夫ですが、グローバルな「変数」は避けるべきです。 – monkut
OK、私は両方の意味を持っていますが、ロードされたデータディクショナリが時間の経過と共に進化する可能性のあるpythonの代替案が表示されません。(新しいロードファイル、削除されたファイル) – Eurydice