假设我想扩展以下 Python 类,其中包含一个我不太了解的装饰器:
from somewhere import some_decorator
class One(object):
@some_decorator
def some_method(self):
do_something()
我是否应该装饰重写的方法?换句话说,我可以安全地做:
class Two(One):
def some_method(self):
super(Two, self).some_method()
或者我需要做什么:
class Two(One):
@some_decorator
def some_method(self):
super(Two, self).some_method()
最佳答案
记住 @decorator
语法的作用:
@decorator
def foo():
print "foo"
只是
的语法糖def foo():
print "foo"
foo = decorator(foo)
因此,未装饰的函数在装饰后不能再通过其名称调用,因为它的名称已分配给其他东西。
这意味着当您在子类中调用super(Two, self).some_method()
时,将调用父类中的装饰函数some_method
。
知道是否还需要装饰子重写方法完全取决于您要做什么以及装饰器做什么。但是要知道,如果您调用 super(Two, self).some_method()
,那么您将调用装饰函数。
关于python - 如何覆盖 Python 中的装饰方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34206620/