保持Python模块井井有条的最佳方法

时间:2018-08-29 16:22:37

标签: python module structure

我正在使用Python在Maya中工作,并且在过去的几个月中,我开始构建许多可以塑造各种工具的不同模块。

最初,我只是将所有内容堆叠在一个根包中,该根包由庞大的模块组成,其中包含一些功能,类等,具体取决于情况,而单独的“核心”模块则包含所有通用内容。

root (package)
    animation.py  (module)
    audio.py      (module)
    modelling.py  (module)
    rigging.py    (module)
    library.py    (module)
    core.py       (module)

最近,我看到了一些不同方法的示例,其中包括为每个宏区域构建程序包并将其中的代码拆分为各种较小的模块。与此类似。

root (package)
    animation (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        bar.py       (module)

    audio (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        foo.py       (module)

   rigging (package)
        __init__.py  (module)
        core.py      (module)
        utils.py     (module)
        ui.py        (module
        foo.py       (module)

   etc

__ init __。py 模块中,其他模块也以这种方式导入。

from core import *
from utils import *
from ui import Window
from foo import Foo

因此,当导入整个程序包时,结果类似于将所有内容放入一个包含所有内容的巨大模块中。最后,要访问每个模块/软件包的功能,此代码应同时适用于两种结构。

import animation
animation.Foo()

我的问题是:

这些方法中的哪些是组织代码的更多逻辑?一方面,“包裹”结构看起来更好地组织了起来,但它给了我更多的周期性进口和重装问题(这可能只是我不良进口习惯的标志)。另一方面,由于我在经典模块中添加了大量内容,因此它们变得越来越难以导航。

1 个答案:

答案 0 :(得分:0)

首先,欢迎您使用StackOverflow!其次,这绝对是一个优先选择的问题,但是您应该避免使用语法from package import *,因为它会严重污染名称空间,尤其是在您有许多功能的情况下。

关于您的问题,如果您查看Python中的许多标准库程序包,它们由一个包含大约5-6个py文件的根文件夹组成。现在,这也许不是最漂亮的事情,但它并没有杂乱无章,而且可以轻松导入。

对于您的情况,由于要考虑的文件很多,首先应该考虑:“我的Python文件太小了吗?”来自Java背景,我了解该驱动器可以制作许多文件,每个文件都包含一小部分。尝试以一种有意义的方式将类似的东西与类似的东西放在一起,而不必包含太多文件。

如果所有这些模块都是通过某种主应用程序连接的,则您应该尝试做的是尽可能地将模块分开,因此您需要从每个模块中导入尽可能少的内容。如果您正在编写库,则应该100%尝试使这些模块尽可能独立,除非计划将其作为一个大库提供。当作为一个库运送时,您基本上可以随意组织它,只要它有意义并且可以工作即可。

基本:

  • 为每个模块创建一个子模块,您会变得漂亮和有条理,但会导入地狱
  • 拥有5-6个大文件很容易,导入很容易,但是文件需要花费时间来导航和查找需要使用/修改的内容