В настоящее время у меня есть 2 похожих API, но они также сильно различаются по реализации (допустим, они зависят от проекта), для пояснения я буду называть их API_utilities_project1.py
и API_utilities_project2.py
.
Эти API являются частью большей структуры, которая также "размещает" скрипты, которые собираются использовать эти API. В зависимости от определенного «проекта» в структуре, сценарии собираются использовать один из этих API. Также сценарии могут быть либо специфичными для проекта, либо они могут быть общими / многократно используемыми во всех проектах (это означает, что некоторые сценарии не будут использоваться / разрешены в некоторых "проектах").
Я хотел создать API-оболочку под названием API_utilities.py
вокруг API_utilities_project1.py
и API_utilities_project2.py
. Таким образом, сценарии могут импортировать API_utilities.py
независимо от проекта (нет необходимости проверять в сценариях, какой проект определен в платформе и на основе этого импорта либо первый, либо второй API) -> логика импорта будет обрабатываться в API_utilities.py
,
Проблема заключается в том, что и в API_utilities_project1.py
, и в API_utilities_project2.py
нет необходимости реализовывать функции, вызываемые одинаково. Поэтому я не могу просто создать интерфейсы для этих функций в API_utilities.py. Единственный способ, с помощью которого я до сих пор работал, это:
API_utilities_project1.py
def foo():
print 'foo'
API_utilities_project2.py
def bar():
print 'bar'
API_utilities.py
if fwk.project=='project1':
from API_utilities_project1 import *
elif fwk.project=='project2':
from API_utilities_project2 import *
else:
print 'error message / exception or whatnot'
def same():
print 'same functionality'
script1.py ('project1' определен в платформе)
import API_utilities as API
API.foo()
API.same()
script2.py ('project2' определен в платформе)
import API_utilities as API
API.bar()
API.same()
Есть ли более чистый способ написания API_utilities.py
, чем при использовании from ... import *
?