Упростите main1.py или main2.py, вызовите middle.py, который вызывает sub1.py или sub2.py - PullRequest
0 голосов
/ 31 января 2020

У меня есть два сценария main1 и main2, которые нужно разделить. Они оба вызывают средний скрипт (например, соединение с базой данных и запрос). Сам запрос поступает из sub1.py для main1 и sub2.py для main2.

В настоящее время я вызываю middle с параметром, указывающим источник. Можно ли это упростить?

#main1.py
import middle

middle.myfunction(arg_i, 'main1')


#main2.py
import middle

middle.myfunction(arg_i, 'main2')


#middle.py
import sub1, sub2

def myfunction(arg1, arg2):
    if arg2 == 'main1':
        ...
        sub1.anotherfunction

    elif arg2 == 'main2':
        ...
        sub2.yetanotherfunction

Потенциальным решением является дублирование myfunction в middle.py, т.е. создание myfunction_main1 и myfunction_main2. Но это не выглядит элегантно.

Бонус: у меня есть дополнительные функции в middle.py, которые относятся только к main1, а не main2. Поскольку я вызываю все функции из main1 с помощью l oop, мне нужно установить в них также sh arg2, иначе я получу ошибку при пропущенном аргументе.

funs = [middle.fun1, middle.fun2, middle.myfunction]
for i in range(3):
    funs[i](arg_i, 'main1')

1 Ответ

0 голосов
/ 31 января 2020

Вы можете передать __file__, так как arg2

__file__ дает вам python имя файла, которое вы можете отслеживать в myfunction, определенном в middle.py.

main1.py
import middle

middle.myfunction(arg_i, __file__)


#main2.py
import middle

middle.myfunction(arg_i, __file__)


#middle.py
import sub1, sub2

def myfunction(arg1, arg2):
    if ('main1.py' in arg2):
        ...
        sub1.anotherfunction

    elif ('main2.py' in arg2):
        ...
        sub2.yetanotherfunction
...