ハッシュテーブル/ディクショナリを使用しているとき、私は時々キーを指定する方法に苦労します。例えばハッシュテーブルまたはディクショナリキー名を保存する場所
:私は(この例ではPythonを使用して)簡単な辞書、
foo = {'bar': 'baz', 'foobar': 'foobaz' }
を作成する場合、私は、キー値を持つ(他のモジュールで)値にアクセスすることができます(foo['bar']
)とbaz
を取り戻します。
Dr. Evilの言葉では、「かなり標準的です。」
残念ながら、キーに静的な文字列を使用すると、このディクショナリを使用するすべてのモジュールがその実装に緊密に結合されます。もちろん、これは他のキータイプ(Enum、オブジェクトなど)を使用する場合にも適用できます。とにかくそれをスライスすると、辞書にアクセスするすべてのモジュールはキーの値を知る必要があります。
これを解決するには、通常、静的定数文字列値(または言語で使用可能な場合は列挙型)をキーに使用し、それらをローカルクラス/モジュールまたは別のモジュール/クラスに公開するか、したがって、辞書キー自体の変更はすべて1つの場所に保存されます。
これは通常、次のようになります。
BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'
は、辞書の使用は、その実施に必ずしもカップルモジュール/クラスがないようなキーを指定するのがより良い方法はありますか?
注:これに対処するいくつかの回答(例:property-to-reference-a-key-value-pair-in-a-dictionary)がありましたが、トピックではこの問題に具体的に対処できていないようです。答えは役に立ちましたが、より広い範囲の経験が必要です。
良い点は、キーが常に既知で定数であれば、プロパティを持つクラス/構造体に入れる方が良いでしょう。 – CodingWithSpike
さて、私は通常、辞書が複数の(3+)モジュールで使用されているときにそうします。しかし、もし私がちょうどあるモジュールから別のモジュールに単純な辞書を渡しているのであれば、ちょっと残酷すぎるように見えませんか?あなたは多くの不動産クラスで終わるかもしれません:) – bedwyr
@bedwyr、確かにPythonのための過剰なものではありません(Jensenの答えを見てください)。構造体が定義されているため、物事をもっと理解しやすくします。 (もちろん、あなたはそれを動的に型付けされた言語で混乱させることができます...) – strager