Ich versuche, die Auswertung von Funktionen mit Hilfe von Dekoratoren zu steuern. Also ich erstelle eine Instanz von MyClass
und dann Funktionen unter der Bedingung mode
Eigenschaften bewerten.Python-Handler zur Überprüfung der Bedingung
class MyClass:
def __init__(self):
self.mode = None
def mode_handler(self, mode):
def wrap(func):
def inner(*args, **kwargs):
if mode == self.mode:
return func(*args, **kwargs)
else:
pass
return inner
return wrap
a = MyClass()
@a.mode_handler(mode='repeat')
def print_args(*args):
print(args)
@a.mode_handler(mode='nuff_saif')
def nuff_said():
print('NUFF SAID')
# 1
a.mode = 'nuff_said'
print_args(1, 2, 3)
nuff_said()
# 2
a.mode = 'repeat'
print_args(4, 5, 6)
nuff_said()
# 3
a.mode = 'something_else'
print_args(7, 8, 9)
nuff_said()
Ich erwartete
NUFF SAID
(4, 5, 6)
wie bei Block 1 mode=='nuff_said'
und bei Block 2 mode=='repeat'
zu bekommen.
Ich habe
(4, 5, 6)
statt. Wie sollte ich meinen Code verbessern?
Interessante Verwendung von Dekorateuren – Har