代码样式 - “展平”包的命名空间

时间:2012-09-27 16:50:52

标签: python coding-style namespaces flatten

我的包层次结构:

InstrumentController/
    __init__.py
    instruments/
        __init__.py
        _BaseInstrument.py
        Keithley2000.py
        # etc...

仪器文件的内容:

# _BaseInstrument.py
class _BaseInstrument(object):
    """Base class for instruments"""
    # etc...

# Keithley2000.py
from InstrumentController.instruments._BaseInstrument import _BaseInstrument
class Keithley2000(_BaseInstrument):
    # etc...

我希望我的用户能够访问这些类,而无需深入研究模块的层次结构。他们应该只需输入from InstrumentController.instruments import Keithley2000,而不是from InstrumentController.instruments.Keithley2000 import Keithley2000

为此,我在InstrumentController.instruments.__init__

中有很多这样的行
from .Keithley2000 import Keithley2000
from .StanfordSR830 import StanfordSR830
# etc...

所以现在这些类位于包命名空间的 top ,而不是子模块中。我的问题是:这是一个好主意吗?这些类与它们所属的模块具有相同的名称,因此在顶层导入类会使模块不可用。这让我有点娇气 - 有没有更好的方法呢?

1 个答案:

答案 0 :(得分:4)

你是如何做到这一点是可以接受的,但我建议你将所有的包/模块名称重新命名为1),这是约定specified in PEP 8,2)它将删除你的阴影问题。