Próba określenia, czy powinienem spróbować użyć dekoratora lub innego sposobu Pythonic, aby zredukować kod wykonywany przez wiele moich funkcji. Chciałbym, aby te funkcje były w stanie wywołać tylko jedną funkcję na początku każdej funkcji lub "udekorować" początek każdej funkcji. Nigdy wcześniej nie używałam dekoratora i staram się zaimplementować ten pomysł dekorowania w sposób pytonowy, aby zredukować wspólny zestaw kodów akcji w każdej funkcji.Czy powinienem ozdobić funkcję?
Mam wiele funkcji, które wykonają ten sam zestaw kroków na początku funkcji. Nie ma jednak pewne obawy struktura wspólnego kodu, który sprawia, że ten „dekorator” pomysł trudne:
Funkcje są w klasie podrzędnej klasy nadrzędnej.
Wspólne rozkazy między funkcjami odniesienia nazwy zmiennych , które są specyficzne dla tej funkcji (lecz podzbiór nazwa funkcji ).
Wspólne polecenia muszą wrócić do osoby dzwoniącej i nie wykonywać żadnych dodatkowych funkcji podrzędnych, jeśli spełniony jest określony warunek. („Jeśli jobj” blok kod próbki)
dla zmiennej przykłady/atrybutów funkcja dziecko get_nas_server (samo) wykorzysta „nas_server” zmienne warianty w wspólnego zestawu kodu. Odejmowanie get_ od nazwy funkcji ujawnia podstawę nazwy zmiennej, która ma być użyta we wspólnym zbiorze kodu. Przykład Nazwy zmiennych i obiektów atrybutami pochodzą z „get_nas_server” nazwa funkcji:
nas_server
nas_server.json
self.nas_server (Attribute)
Oto wspólny kod z jedną z funkcji:
####################################################################
def get_nas_server(self):
####################################################################
"""\nGets COMMAND nas_server and places data into self.nas_server"""
try:
self.nas_server
return self.nas_server
except AttributeError:
pass
self.get_file_cmd('nas_server')
jobj = self.fresh_json('nas_server.json')
if jobj :
self.nas_server = jobj
return self.nas_server
self.get_file_cmd('get_nas_server')
Wszystko poniżej tego kodu w funkcji jest specyficzne dla celu funkcji i nie jest odpowiednie do dyskusji tutaj. Zasadniczo próbuję zrobić cały ten kod powyżej wielokrotnego użytku w moich funkcjach, ale kod musi mieć zmienne i atrybuty zmienione w zależności od nazwy funkcji.
Dziękuję za przeczytanie, jeśli dotarłeś tak daleko i dziękuję za wszelką pomoc.
Dzięki za wejście. Kod, który ma zostać dodany do istniejącej funkcji, musi mieć możliwość powrotu do pierwotnego wywołującego i nie wykonywać już kodu, jeśli spełnione są określone warunki. Ten "powrót", jeśli wymaganie warunku nie wydaje się możliwe z pomocą metody pomocnika. – Fragtzack
@Fragtzack Prawda, ale możesz to zrobić w kilku liniach w funkcji, która wywołuje pomocnika. – augurar
ok, spróbuje tego. W funkcji, która wywołuje tego pomocnika, nazywam tego pomocnika po prostu self._get_something ('nas_server')? – Fragtzack