Python在单独的文件中管理类

时间:2012-11-04 09:38:10

标签: python class design-patterns import

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

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

from models.classX import classX
from models.classY import classY

如果我想一次导入所有内容,例如from models import *,我发现我可以在import中添加各种models/__init__.py。但这是pythonic方式吗?惯例是什么?

3 个答案:

答案 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.classXmodels.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()