Piszę moduł, który zapewnia jedną funkcję i wymaga kroku inicjalizacji, jednak ze względu na pewne ograniczenia muszę zainicjować przy pierwszym wywołaniu, więc szukam właściwego idiomu w python, który pozwoliłby mi pozbyć się warunkowego.Zmiana implementacji funkcji w Python
#with conditional
module.py
initialized = False
def function(*args):
if not initialized: initialize()
do_the_thing(*args)
chciałbym się pozbyć, że warunkowe z czymś takim (nie działa):
#with no conditional
module.py
def function(*args):
initialize()
do_the_thing(*args)
function = do_the_thing
Zdaję sobie sprawę, że nie można po prostu używać nazw w module i zmienić je na środowisko wykonawcze, ponieważ moduły korzystające z from module import function
nigdy nie zostaną zmienione przez moduł function=other_fun
.
Czy istnieje jakiś pythonowy idiom, który mógłby zrobić to we właściwy sposób?
google dla "dekorator Pythona – Triptych
nie widzę, w jaki sposób może to zrobić dekorator, warunkowego pozostaje tam, jeśli testujesz rozwiązanie @graphox, używając generatora działającego zgodnie z oczekiwaniami, chociaż wydaje się nieco dziwne. –