使用具有相同名称的装饰器作为实例方法

时间:2015-03-11 18:16:55

标签: python python-decorators

我有以下代码段:

from decorators import before_save

class User(Model):
    def before_save(self):
        pass

    @before_save
    def meth(self):
        pass

似乎当我尝试装饰meth时,它“使用”实例方法before_save,而不是导入的装饰器。我怎样才能声明一个与装饰器同名的实例方法,并且仍能正确使用它们?

装饰者不应该按预期工作吗?如何将before_save实例方法引用为before_save,而不引用其类?

3 个答案:

答案 0 :(得分:3)

您可以尝试以下

import decorators
# omitted

@decorators.before_save
def meth(self):
    pass

我想使用单行,但遇到this

答案 1 :(得分:2)

您可以更改导入名称:

from decorators import before_save as before_save_decorator

class User(Model):
    def before_save(self):
        pass

    @before_save_decorator
    def meth(self):
        pass

这应该让你使用两者。

答案 2 :(得分:2)

或者您可以在:

之后定义before_save方法
from decorators import before_save

class User(Model):

    @before_save
    def meth(self):
        pass

    def before_save(self):
        pass

但这不是最好的解决方案,因为在这里发生的事情并不明显,你可以在以后忘记。