5

私は、すべての IO アクティビティが IO オブジェクトによって行われる Python でゲームをプログラミングしています (そのオブジェクトを、別のユーザー インターフェイスを実装する別のオブジェクトに簡単に交換できることを願っています)。ゲーム内の他のほとんどすべてのオブジェクトは、ある時点で IO システムにアクセスする必要があります (たとえば、メッセージの出力、プレーヤーの位置の更新、ゲーム内のアクションによって引き起こされる特殊効果の表示)。私の質問は次のとおりです。

IO オブジェクトへの参照をグローバルに使用できるようにすることは理にかなっていますか?

別の方法は、IO オブジェクトへの参照を、__init__()それを使用する必要があるすべてのオブジェクトの に渡すことです。これはテストの観点からは良いことだと理解していますが、結果として生じる「関数シグネチャの汚染」に見合う価値はありますか?

ありがとう。

4

3 に答える 3

9

はい、これはグローバル変数の正当な使用法です。あなたが言いたくない場合は、このグローバルと同等のコンテキストオブジェクトを渡すことも別のオプションです。

複数のファイル (モジュール) を使用していると思われるので、次のようにしてみませんか。

import io
io.print('hello, world')
io.clear()

これは、単純な印刷よりも複雑な I/O を必要とするプログラムがロギングなどを行う一般的な方法です。

于 2009-03-26T22:20:35.353 に答える
1

はい、そう思います。

別の可能性として、やのloggerModuleような機能を持つモジュールを作成することもできますが、これはわずかに優れているだけです。print()write()

于 2009-03-26T22:22:16.053 に答える
0

いいえ。

変数は、グローバル名前空間で渡すにはあまりにも具体的です。代わりに、実行時にそれらに魔法のことを行うことができる静的関数/クラス内にそれらを隠します(または他のものを完全に呼び出します)。

IO が定期的に状態を変更できる場合、またはしばらくブロックする必要がある場合 (多くのソケットがそうであるように) はどうなるかを考えてみてください。

同じコード ブロックが複数回含まれているとどうなるかを考えてみましょう。変数インスタンスも複製されますか?

同じ変数のバージョン 2 が必要な場合に何が起こるかを考えてみてください。インターフェイスを変更したい場合はどうしますか?それを参照するすべてのコードを変更する必要がありますか?

変数を使用するすべてのコードを感染させて、変数が悪くなる可能性があるすべての方法を知っていることは本当に理にかなっていますか?

于 2009-03-26T22:50:02.820 に答える