簡體   English   中英

為什么從同級包中導入模塊被視為反模式?

[英]Why is importing a module from a sibling package considered an anti-pattern?

我剛開始學習如何用 Python 編寫代碼(來自 Java 背景)。

我有這個非常基本的項目結構,使用我可以召集的最簡單的 MVC 形式:

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

假設我從 view.py 開始並且我需要在它和它的控制器之間建立一個鏈接,我知道我必須使用導入命令來導入控制器:

from controllers import controller

我知道這是行不通的,所以我使用相對路徑來嘗試使其工作。

from ..controllers import controller

我也知道這不起作用,因為它無法真正看到文件夾,為了解決這個問題,我需要將 myproject 文件夾本身設置為一個包。 但這對我來說沒有意義。

我在這里讀到這種文件結構幾乎是一種“反模式”。 但為什么? MVC 通過解耦它們的功能在結構上是合理的,因此將它們分離到自己的包中是有意義的。

你不能從“文件”的角度思考,而是從包的角度思考。 你的整個項目應該是它自己的包,它像任何其他包一樣安裝在你的 Python 環境中。 這些之間沒有根本區別:

from django.db import models

from myproject.controllers import controller

django是一個全局安裝的包。 myproject應該是一個全局安裝的包。

如果讓一個全局的“ controllers ”模塊四處漂浮是沒有意義的,它顯然應該是一個更大的包的一部分。

在一個包中,如果你願意,你可以進行相對導入,這主要是速記,如果你重命名頂級包可能會有所幫助,但在其他方面是無關緊要的。

始終考慮最終將您的包發布到 PyPI 或構建一個您分發到生產服務器進行安裝的輪子,即使您永遠不會做這些事情中的任何一件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM