2

コードを書いているときに、些細な依存関係に対処するという問題に遭遇することがよくあります。たとえば、最近書いたメモ化オブジェクトのレイアウトを見てみましょう。私のディレクトリ構造は次のようになります。

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru.py
    queue.py
README

問題は、具体的には、mru.pyにあります。mru.pyには、queue.pyで定義されたキューを使用するMRUクラスが含まれています。ただし、明らかに、キューはメモ化の戦略ではなく、戦略の下に置くことは意味がありません。

私が持っていたアイデアの1つは、次のようにコードを設定することでした。

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru/
      __init__.py
      mru.py
      queue.py
README

ただし、この設定の問題は、ユーザーがmruがサブパッケージに含まれていることを認識している必要があることです。

別のアイデアは、次のように構造を配置することでした。

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru.py
    dependencies/
      __init__.py
      queue.py
README

これで私の問題は解決しますが、直感的には間違った方法のようです。

この不整合を説明するためにファイルを整理する正しい方法は何ですか?

4

1 に答える 1

3

2番目の構造のバリエーションを提案します。

memoizer/
  memoizer.py
  tests.py
  strategies/
    __init__.py
    perfect.py
    mru/
      __init__.py <- This is what used to be mru.py
      queue.py
README

次に、ユーザーはただimport memoizer.strategies.mru

それはそれを行うための迅速かつ簡単な方法です。ただし、元のファイルを保持し、そのファイルからアイテムを次のようmru.pyに公開することはできます。__init__.py

import mru as _mru

SomeClass = _mru.SomeClass
# etc...
于 2011-11-03T06:02:16.457 に答える