为什么从同级包中导入模块被视为反模式?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

为什么从同级包中导入模块被视为反模式?

is大龙 2020-03-24 12:36:31 63

我刚刚开始学习如何用Python编码(来自Java背景)。

我有一个非常基本的项目结构,使用最简单的MVC形式:

myproject
    controllers
        __init__.py
        controller.py
    models
        __init__.py
        model.py
    views
        __init__.py
        view.py
    main.py

假设我从view.py开始,并且需要在它和它的控制器之间建立链接,我知道我必须使用import命令来导入控制器:

从控制器导入控制器

我知道这是行不通的,因此我使用相对路径来尝试使其工作。

来自..controllers导入控制器

我还知道这是行不通的,因为它无法真正看到该文件夹​​,以便修复需要将myproject文件夹本身包装为包的问题。但这对我来说没有意义。

我在这里读到,这种文件结构几乎是一种“反模式”。但是为什么呢?MVC通过解耦它们的功能在结构上是合理的,因此将它们分成各自的程序包是有意义的。

问题来源:stackoverflow

前端开发 Java Python
分享到
取消 提交回答
全部回答(1)
  • is大龙
    2020-03-24 12:36:38

    您不能只考虑“文件”,而要考虑软件包。您的整个项目应该是与其他任何软件包一样安装在Python环境中的自己的软件包。这些之间没有根本区别:

    from django.db import models
    
    from myproject.controllers import controller
    

    django是一个全局安装的软件包。myproject应该是一个全局安装的软件包。

    如果没有一个全局的“ controllers”模块浮动,那么它显然应该是更大程序包的一部分。

    在包中,您可以根据需要进行相对导入,这通常是简写形式,如果重命名顶级包,则可能会有所帮助,但这样做没有意义。

    始终考虑将软件包最终发布到PyPI或构建一个轮子,然后分发给生产服务器进行安装,即使您永远不会做任何一件事情。

    回答来源:stackoverflow

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程