假设我想扩展以下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()
Vincent Sava.. 5
记住@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()
,那么您将调用修饰的函数。
记住@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()
,那么您将调用修饰的函数。