我有一个使用MVC模式的项目。
在文件夹“models”中我有很多类,每个类现在都有自己的文件。但我觉得它不方便,因为每次我需要使用一个类,我必须单独导入它。例如。我的应用程序源代码中有很多以下内容:
from models.classX import classX
from models.classY import classY
如果我想一次导入所有内容,例如from models import *
,我发现我可以在import
中添加各种models/__init__.py
。但这是pythonic方式吗?惯例是什么?
答案 0 :(得分:6)
Python不是java;请避免使用每个文件一个文件模式。如果您无法更改,可以从models
包的子模块中导入所有这些内容:
# all.py: convenient import of all the needed classes
from models.classX import classX
from models.classY import classY
...
然后在你的代码中你可以写:
import my.package.models.all as models # or from my.package.models.all import *
然后继续使用models.classX
,models.classY
等
答案 1 :(得分:0)
大多数pythonic方式是你已经使用的方式。您可以通过在模块中对类进行分组来减轻导入。例如,在Django中,通常所有应用程序模型都在一个文件中。
来自python docs:
虽然某些模块设计为在使用
import *
时仅导出遵循某些模式的名称,但在生产代码中仍被视为不良做法。
答案 2 :(得分:0)
首先,您应该重命名您的类和模块,使它们不匹配,并遵循PEP8:
models/
classx.py
class ClassX
classy.py
class ClassY
然后,我在models/__init__.py
:
from models.classx import ClassX
from models.classy import ClassY
在主代码中的含义,您可以执行以下任何一项:
from models import *
x = ClassX()
from models import ClassX
x = ClassX()
import models
x = models.ClassX()