3

我的模块都在一个难以维护的大文件中。打破事物的标准方法是什么?

我在一个文件中有一个模块my_module.py,我像这样导入它:

import my_module

“my_module” 很快就会变成一千行,这正在推动我保持一切正常的能力的极限。我正在考虑添加文件my_module_base.pymy_module_blah.py等等。然后,替换my_module.py

from my_module_base import *
from my_module_blah import *
# etc.

然后,用户代码不需要更改:

import my_module  # still works...

这是标准模式吗?

4

3 回答 3

5

这取决于您的模块实际在做什么。通常,让你的模块成为一个包含 '__init__.py'文件的目录总是一个好主意。因此,您首先将您的转换your_module.py为类似your_module/__init__.py.

之后,您继续根据您的业务逻辑。这里有一些例子:

  • 您是否有模块 API 不直接使用的实用程序函数将它们放在名为的文件中utils.py

  • 你有一些处理数据库的类或代表你的数据库模型的类吗?models.py

  • settings.py您是否有一些内部配置,将其放入一些名为或的额外文件中可能是有意义的config.py

这些只是示例(从可重用应用程序的 Django 方法中偷来的一点点 ^^)。如前所述,这在很大程度上取决于您的模块的功能。如果之后它仍然太大,那么创建子模块(作为带有自己的子目录__init__.py)也是有意义的。

于 2011-04-27T04:42:49.500 回答
2

我相信对此有很多意见,但我会说你将它分解成更明确的功能单元(模块),包含在一个包中。然后你使用:

from mypackage import modulex

然后使用包名来引用对象:

modulex.MyClass()

等等

你应该(几乎)永远不要使用

from mypackage import *

因为这会引入错误(来自不同模块的重复名称最终会破坏一个)。

于 2011-04-27T04:41:28.703 回答
1

不,这不是标准模式。from something import *通常不是一个好习惯,因为它会导入很多你不打算导入的东西。而是遵循与您相同的方法,但包括专门从一个到另一个的模块,例如

在 base.py 中,如果你def myfunc在 main.py 中使用 'from base import myfunc So that for your users,main.myfunc` 也可以。当然,您需要注意不要最终执行循环导入。

此外,如果您认为这是必需的,则使用该构造from something import *控制导入值。__all__

于 2011-04-27T05:05:02.543 回答