Skip to main content
 首页 » 编程设计

python之在 Python 中布置 MVC 类

2025年05月04日2052php

我正在使用 Python 开发一个项目,并且我正在尝试遵循一种有点严格的 MVC 模式进行练习。我的想法是把东西分成名为 model、view 和 controller 的包,加上一个 Model,View 和 Controller 类。每个包都会有每个部分的支持文件。

我的问题是我希望能够像这样使用它们:

from controller import Controller 

然后在包含 Controller 类的文件中我可以:

from controller.someclass import SomeClass 

但如果我将它们放在同名的包中,就会出现问题。我阅读了模块的工作原理,并意识到我需要将它们命名为 controller/__init__.py、model/__init__.py 和 view/__init__.py,但是将它们放在那个文件中似乎很奇怪,而且它们都以 __init__.py

的形式出现在 gedit 中,这有点烦人

有更好的方法吗?我这样做的方式正确吗?

请您参考如下方法:

我在 django 源代码中看到了一些黑魔法,它们将 base.py 文件中的类提取到 __init__.py 命名空间中。但是我不确定这是怎么做到的。 (有关如何执行此操作的信息,请参阅评论。)

据我所知,您可以做以下两件事之一。

一个 - 在 bar/controller/__init__.py

中
import os,sys 
# Make sure the interpreter knows were your files are. 
sys.path.append(os.path.join(os.path.dirname(__file__),'../') 
from bar.controller import Controller 
from bar.model import Model 
from bar.view import View 
class Controller(object): 
 model = Model() 
 view = View() 

现在你制作 bar/model/__init__.py 和 bar/view/__init__.py

乙- 在 bar/controller/__init__.py

中
class Model(object): 
 pass 
class View(object): 
 pass 
class Controller(object): 
 model = Model() 
 view = View() 

编辑:... 阅读您的评论后,我想到了第三种选择。包不会直接转换为 python 中的模块。我认为您想要的结果是创建这样的目录结构:

bar/ 
  __init__.py 
  controller.py 
  model.py 
  view.py 

然后在controller.py

里面
import os,sys 
from bar.controller import Controller 
from bar.model import Model 
from bar.view import View 
class Controller(object): 
 model = Model() 
 view = View() 

这对我来说是一个巨大的障碍,要从 Java 转过来。您的类文件名不必与类名匹配。将它们视为一个步骤,您进入文件夹(模块),然后进入文件(.py),然后导入您的类。(模型(对象))