Ich habe eine Python-Klasse mit vielen Methoden mit Signatur:
def select_xxx(self, arg1 , arg2 , .. argn, intersect = False)
D.h. die Methoden haben eine unterschiedliche (1-3) Anzahl von Positionsargumenten und ein optionales Argument intersect mit dem Standardwert False. Ich möchte alle diese Methoden mit einem Decorater dekorieren, der den Wert des intersect-Parameters untersucht und entsprechend unterschiedliche Aktionen ausführt. Mein derzeitiger Ansatz ist in etwa so:
def select_decorator(select_method):
def select_wrapper( self , *args, intersect = False , **kwargs)
if intersect:
# Special init code for intersect == True
select_method( self , *args , **kwargs)
else:
# Normal call path for intersect == False
select_method( self , *args , **kwargs)
return select_wrapper
@select_decorator
select_xxx( self , arg1 , arg2 , intersect = False)
Aber das optionale Argument intersect in den *args und **kwargs Mix innerhalb des Dekorators zu bekommen, macht derzeit keine Freude. Ich könnte die **kwargs-Funktionalität opfern, wenn das das Problem leichter zu lösen macht. Irgendwelche Vorschläge?
Joakim