2

在编写代码时,我经常遇到解决琐碎依赖关系的问题。例如,让我们以我最近编写的一个 memoizer 对象的布局为例。我的目录结构如下所示:

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

问题特别在于mru.py。mru.py 包含一个使用 queue.py 中定义的队列的 MRU 类。显然,队列不是记忆器的策略,将其置于策略之下没有任何意义。

我的一个想法是将我的代码设置为如下所示:

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

我会建议第二种结构的变体:

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 回答