Я строю модуль, но у меня трудные времена, чтобы понять, как лучше всего избегать загрязнения рабочего пространства.
Пример кода
Мой модуль:
aModule\
__init__.py
aSubModule.py
someFunctions.py
Содержимое файлов:
init .py
from .someFunctions import function1, function2
from aModule import aSubModule
someFunctions.py
from numpy import exp,log,sqrt
def function1():
print('function1: Hello World!')
def function2():
print('function2: Hello ' + aUtilityFunction())
def aUtilityFunction(): #This should not be imported
return 'World!'
aSubModule.py
from numpy import exp,log,sqrt
def function3():
print('I am function 3')
def function4():
print('I am function 4')
Проблема
При выполнении
import aModule
Я хотел бы иметь возможность доступа
aModule.function1()
aModule.function2()
aModule.aSubModule.function3()
aModule.aSubModule.function4()
Однако ятакже имеют следующее нежелательное поведение:
Проблема 1
Файл someFunctions.py импортируется как подмодуль.Другими словами, я могу получить доступ к функции 1 как из aModule.function1, так и из aModule.someFunctions.function1.Это, на мой взгляд, грязно.Единственное решение, которое я нашел, - переименовать файл _someFunctions.py.Подчеркивание теперь говорит Python не импортировать его.Это выглядит хорошо, но я не уверен, считается ли это хорошей практикой.
Проблема 2
Функции exp, log и sqrt импортируются в aModule.aSubModule.Я хотел бы получить доступ к функциям внутри aSubModule , делая
aModule.aSubModule.function3()
, но я бы хотел избежать использования exp, log и sqrt внутри aModule.aSubModule
Это потому, чтовнутри «настоящего» подмодуля, над которым я работаю, у меня есть всего 3-4 функции, которые имеют отношение к пользователю, но более 10-15 импортов.Поэтому, когда я пытаюсь завершить табуляции
aModule.aSubModule.<tab>
, всплывают около 20 записей, из которых только 3-4 имеют отношение.