簡體   English   中英

如何在 Python 中將兩個 python 文件作為單個模塊導入?

[英]How to import two python files as a single module in Python?

我在一個具有多種功能的 Python 項目中工作。 這些功能中的每一個都作為自己的項目使用自己的模塊。

我已經定義了一個utils_general.py模塊,其中包含每個功能都可以使用的通用功能。 此外,每個功能都有自己的utils_functionality_x.py模塊,其中包含僅在該模塊中使用的功能。 我的項目結構如下:

.
+-- __init__.py
+-- src
|   +-- utils_general.py
|   +-- functionality_1.py
|   |   +-- __init__.py
|   |   +-- main_functionality_1.py
|   |   +-- utils_functionality_1.py
|   +-- functionality_2.py
|   |   +-- __init__.py
|   |   +-- main_functionality_2.py
|   |   +-- utils_functionality_2.py
+-- .gitignore
+-- README.md

在上面的例子中,在main_functionality_1.py 中,將使用來自utils_general.py和來自utils_functionality_1.py 的函數 同樣,在main_functionality_2.py 中,它將使用來自utils_general.py和來自utils_functionality_2.py 的函數

我想導入 utils 文件的所有功能,就好像它是單個模塊一樣。 我的意思是,我想讓utils_functionality_1.py “繼承” utils_general.py的功能。 這個想法類似於類繼承,但是這兩個文件是完全函數式的(在utils_general.pyutils_functionality_1.py中沒有定義類,只有函數)。

例如,這將導致在main_functionality_1.py我可以訪問到utils_general.pyutils_functionality_1.py的功能名為utils (注意,沒有任何功能在utils_general.pyutils_functionality_1.py相同的名稱)。 例如,我想做這樣的事情(這行不通):

# This is pseudo-code and won't work
import src.utils_general as utils
import src.functionality_1.utils_functionality_1 as utils

我能想到的就是將utils_general.py的函數導入utils_functionality_1.py ,然后創建一個可以從外部調用的包裝函數。 像這樣的東西:

utils_functionity_1.py 中的代碼:

# Code in utils_functionality_1.py
import src.utils_general as utils_general

def function_general(*args, **kwargs):
    return utils_general.function_general(*args, **kwargs)

有沒有更好的方法/良好做法來在 Python 中的模塊之間進行這種“偽繼承”?

您必須在utils_functionality_1utils_general導入所有名稱, utils_general此而已。

# utils_functionality_1.py
from utils_general import *

您可能需要稍微更改文件夾結構,但您可以使用“命名空間包”來擴展具有附加文件的現有模塊。

命名空間包是一種將單個 Python 包拆分到磁盤上多個目錄的機制。

這是我在該主題上寫的答案

暫無
暫無

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

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