Python在单独的文件中管理类

w00*_*00d 1 python import design-patterns class

我有一个使用MVC模式的项目.

在文件夹"models"中我有很多类,每个类现在都有自己的文件.但我觉得这样不方便,因为每次我需要使用一个类,我必须单独导入它.例如,我的应用程序源代码中有很多以下内容:

from models.classX import classX
from models.classY import classY
Run Code Online (Sandbox Code Playgroud)

如果我想一次导入的一切,像from models import *我发现我可以把各种importmodels/__init__.py.但这是pythonic方式吗?惯例是什么?

use*_*342 6

Python不是java; 请避免使用每个文件一个文件模式.如果您无法更改它,可以从models包的子模块中导入所有这些:

# all.py: convenient import of all the needed classes
from models.classX import classX
from models.classY import classY
...
Run Code Online (Sandbox Code Playgroud)

然后在你的代码中你可以写:

import my.package.models.all as models  # or from my.package.models.all import *
Run Code Online (Sandbox Code Playgroud)

并继续使用models.classX,models.classY等等.

  • 您可以在`models/__ init __.py`中执行相同的操作,然后执行`import my.package.models`. (3认同)
  • @glglgl然后你失去了单独导入`class ...`模块的能力 - 任何从包中导入任何东西都会加载整个群.如果需要(或已经存在)这种紧耦合,那么在`__init __.py`中导入它们是可行的方法.但是人们希望拥有这么多模块的整个*点*能够分别导入它们. (2认同)
  • 如果类足够相关以生活在同一模块中,那么它们可能会共享函数和变量.将这些全部放在同一个文件中通常是有意义的. (2认同)