使用与实例方法同名的装饰器

Use decorator with same name as an instance method

我有以下片段:

from decorators import before_save

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

    @before_save
    def meth(self):
        pass

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

装饰器不应该按预期工作吗?怎么可能像 before_save 一样引用 before_save 实例方法,而不引用其 class?

您可以尝试以下方法

import decorators
# omitted

@decorators.before_save
def meth(self):
    pass

我想使用单线,但 运行 变成了

您可以更改导入名称:

from decorators import before_save as before_save_decorator

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

    @before_save_decorator
    def meth(self):
        pass

这应该可以让您同时使用两者。

或者您可以在以下位置定义 before_save 方法:

from decorators import before_save

class User(Model):

    @before_save
    def meth(self):
        pass

    def before_save(self):
        pass

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