当前位置:  开发笔记 > 编程语言 > 正文

如何覆盖Python中的修饰方法?

如何解决《如何覆盖Python中的修饰方法?》经验,为你挑选了1个好方法。

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



1> Vincent Sava..:

记住@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(),那么您将调用修饰的函数。

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有