/ / Python-Methode mit optionalem Argument dekorieren - Python, Dekorator

Python-Methode mit optionalem Argument - Python, Decorator - dekorieren

Ich habe eine Python-Klasse mit vielen Methoden mit Signatur:

def select_xxx(self, arg1 , arg2 , .. argn, intersect = False)

Das heißt Die Methoden haben eine unterschiedliche (1-3) Anzahl von Positionsargumenten, und ein optionales Argument überschneidet sich mit dem Standardwert False. Ich möchte alle diese Methoden mit einem Dekorationsprogramm ausstatten, das den Wert des Schnittparameters berücksichtigt und dementsprechend verschiedene Aktionen ausführt. Mein aktueller Ansatz ist ungefähr 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 sollte ineinander übergehendie * args und ** kwargs mischung im dekorateur ist momentan keine freude. Ich könnte die ** kwargs-Funktionalität opfern, wenn das Problem dadurch leichter zu lösen ist. Irgendwelche Vorschläge?

Joakim

Antworten:

2 für die Antwort № 1

Ich gehe davon aus, dass Schnittmenge immer als Schlüsselwortargument übergeben wird. In diesem Fall können Sie dies einfach in Ihrem Dekorateur tun

def select_decorator(select_method):

def select_wrapper( self , *args, **kwargs):
intersect = kwargs.has_key("intersect") and kwargs["intersect"]
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