我的模块是一个很难维护的大文件。什么是打破事情的标准方法?
我在文件my_module.py
中有一个模块,我这样导入:
import my_module
“my_module”将很快成为千行,这正在推动我保持一切顺利的能力极限。我在考虑添加文件my_module_base.py
,my_module_blah.py
等。然后,用
my_module.py
from my_module_base import *
from my_module_blah import *
# etc.
然后,用户代码无需更改:
import my_module # still works...
这是标准模式吗?
答案 0 :(得分:4)
这取决于您的模块实际上在做什么。通常,最好将模块设置为内部带有“__init__.py'
文件的目录。因此,您首先要将your_module.py
转换为类似your_module/__init__.py
的内容。
之后,您将继续根据您的业务逻辑。这里有一些例子:
你有没有直接被模块API使用的实用程序函数将它们放在一个名为utils.py
的文件中
您是否有一些类处理数据库或表示您的数据库模型将它们放入models.py
您是否有一些内部配置可能会将其放入名为settings.py
或config.py
这些只是示例(从可重复使用的应用程序的Django方法中有点被盗^^)。如上所述,它取决于你的模块做了多少。如果它之后仍然太大,那么创建子模块(作为具有自己的__init__.py
的子目录)也是有意义的。
答案 1 :(得分:2)
我确信对此有很多意见,但我会说你把它分解成包含在包中的更明确的功能单元(模块)。然后你使用:
from mypackage import modulex
然后使用包名称引用对象:
modulex.MyClass()
等。
你应该(几乎)永远不要使用
from mypackage import *
因为那可能会引入错误(来自不同模块的重复名称将最终破坏一个)。
答案 2 :(得分: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__
构造控制导入值。