python - 如何覆盖 Python 中的装饰方法?

标签 python oop

假设我想扩展以下 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/

相关文章:

Python - BeautifulSoup 抓取非标准网络表

java - 如何开发智能手机和 PC 的应用程序

jquery - 如何从jquery选择器获取 "real"对象

php - 困惑于 PHP 中的依赖注入(inject)(类链)

c# - 确保封装的建议

python - 交替 append 两个列表中的元素

python - 我可以更改 python 首先查找模块的顺序吗?

python - 如何从预定义 block 构建正则表达式

python - Django ;我如何从自定义 'skin' 目录中提供模板/图像/css/js?

java - 从派生类调用构造函数