非常に少数のモジュール(約4個程度)で構成される小さなPythonプログラムがあります。メインモジュールはタプルのリストを作成し、それによって多数のレコードを表します。これらのタプルは、それらを返す単純な関数を介して他のモジュールで使用できます(たとえばget_records()
)。
しかし、これが良いデザインかどうかはわかりません。問題は、他のモジュールがタプル内の各要素のインデックスを知る必要があることです。これにより、モジュール間の結合が増加し、メインモジュールを使用したい人にはあまり透過的ではありません。
私はいくつかの選択肢を考えることができます:
タプル要素のインデックス値をモジュール定数(たとえば、、など)として使用できるようにし
IDX_RECORD_TITLE
ますIDX_RECORD_STARTDATE
。これにより、のようなマジックナンバーが不要になりますtitle = record[3]
。タプルを使用せずに、レコードクラスを作成し、これらのクラスオブジェクトのリストを返します。利点は、クラスメソッドが。のような自明の名前を持つこと
record.get_title()
です。タプルは使用せず、代わりに辞書を使用してください。したがって、このシナリオでは、関数は辞書のリストを返します。利点は、辞書キーも自明であるということです(ただし、モジュールを使用している人はそれらを知っている必要があります)。しかし、これは大きなオーバーヘッドのようです。
タプルはPythonの大きな強みの1つであることがわかったので(クラス/オブジェクトのコーディングオーバーヘッドなしで複合データを渡すのは非常に簡単です)、現在(1)を使用していますが、それでも最善のアプローチは何でしょうか。