1

非常に少数のモジュール(約4個程度)で構成される小さなPythonプログラムがあります。メインモジュールはタプルのリストを作成し、それによって多数のレコードを表します。これらのタプルは、それらを返す単純な関数を介して他のモジュールで使用できます(たとえばget_records())。

しかし、これが良いデザインかどうかはわかりません。問題は、他のモジュールがタプル内の各要素のインデックスを知る必要があることです。これにより、モジュール間の結合が増加し、メインモジュールを使用したい人にはあまり透過的ではありません。

私はいくつかの選択肢を考えることができます:

  1. タプル要素のインデックス値をモジュール定数(たとえば、、など)として使用できるようにしIDX_RECORD_TITLEますIDX_RECORD_STARTDATE。これにより、のようなマジックナンバーが不要になりますtitle = record[3]

  2. タプルを使用せずに、レコードクラスを作成し、これらのクラスオブジェクトのリストを返します。利点は、クラスメソッドが。のような自明の名前を持つことrecord.get_title()です。

  3. タプルは使用せず、代わりに辞書を使用してください。したがって、このシナリオでは、関数は辞書のリストを返します。利点は、辞書キーも自明であるということです(ただし、モジュールを使用している人はそれらを知っている必要があります)。しかし、これは大きなオーバーヘッドのようです。

タプルはPythonの大きな強みの1つであることがわかったので(クラス/オブジェクトのコーディングオーバーヘッドなしで複合データを渡すのは非常に簡単です)、現在(1)を使用していますが、それでも最善のアプローチは何でしょうか。

4

3 に答える 3

4

タプルを介してオブジェクトを渡す際のオーバーヘッドや複雑さは見られません(タプルもオブジェクトです)

タプルが目的にかなう場合はIMOを簡単に使用できますが、制約を確認したように、データをクリーンに表すクラスに切り替えるだけです。

class MyData(object):
    def __init__(self, title, desc):
        self.title = title
        self.desc = desc

getterまたはsetterメソッドを追加する必要はありません。

于 2010-07-06T06:58:19.720 に答える
0

そのような場合、私は辞書を使う傾向があります。少し後でコードを使用するために戻ってきたときに、自分で簡単に理解できるようにするためだけに。

それが「巨大なオーバーヘッド」かどうかはわかりません。それはあなたがそれをする頻度とそれが何のために使われるかによると思います。私は最も簡単な解決策から始めて、本当に必要なときに最適化します。驚くべきことに、そのようなものを変更する必要はほとんどありません。

于 2010-07-06T06:58:52.113 に答える