我正在使用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()
我的问题是:
以下哪种方法更能组织代码?在某种程度上,“包”结构看起来更有条理,但它给了我更多的循环导入和重新加载问题(这可能只是我糟糕的导入习惯的一个标志)。另一方面,由于我投入的大量内容,经典模块开始变得非常难以导航。
首先,欢迎来到StackOverflow!其次,这绝对是一个偏好问题,但是你应该避免语法from package import *
,因为它会污染命名空间很多,特别是如果你有很多功能。
关于你的问题,如果你看看Python中的许多标准库包,它们包含一个大约5-6个py文件的根文件夹。现在,这可能不是最漂亮的事情,但它没有杂乱无章,它允许轻松进口。
对于您的情况,由于您需要考虑许多文件,因此您应首先考虑“我的Python文件是否太小?”来自Java背景,我理解制作大量文件的驱动器,每个文件都包含一点点。尝试以一种有意义的方式放置类似的东西,而不需要太多的文件。
如果所有这些模块都通过某种主应用程序连接,那么您应该尝试的是尽可能地分离模块,因此您需要从每个模块中导入尽可能少的内容。如果您正在编写库,则应该100%尝试尽可能使模块独立,除非您计划将其作为一个大型库运送。当作为一个库运输时,您可以基本上组织它,只要它有意义和有效。
基本上: