假设我们有以下情况,
class A():
def something():
...
...
...
class B(A):
def use_something():
...
...
# Now, at this point I want something() to be decorated with a
# decorator. But, since it is already defined in base class,
# I am not getting how to decorate it here, in the subclass.
self.something()
...
...
现在,在类B中,我想使用类A中的东西(),但是我想对它应用一个装饰器。我不能在A类装修,因为我要在不同的地方申请不同的装修师。例如,类C(A),我想在这里也使用一些东西(),使用不同的装饰符。
那么,回到最初的问题;我如何将装饰器应用于子类中的超类方法?
您为什么不能重写something()
?
class A():
def something(self):
...
class B(A):
def use_something(self):
...
self.something()
...
def something(self):
# Do "decorator" stuff
super().something()
# Do more "decorator" stuff
好了(带和不带参数):
def simple_dec(func):
def wrapped(*args, **kwargs):
return 'No way'
return wrapped
def simple_dec_params(first_param, second_param):
def dec(func):
def wrapped(*args, **kwargs):
return '{} {}'.format(first_param, second_param)
return wrapped
return dec
class A():
def something(self):
print 'Something'
class B(A):
def use_something(self):
first_param = 'No'
second_param = 'Way'
print simple_dec(self.something)()
print simple_dec_params(first_param, second_param)(self.something)()
b = B()
b.use_something()