【发布时间】:2014-02-18 09:44:53
【问题描述】:
我有一个类,我有多种方法。我想将其中一种方法用作其他方法的装饰器。为此,我使用以下语法:
@self.action
def execute(self,req):
action 是我课堂上的其他方法。但它不起作用并抛出异常为
name 'self' is not defined
【问题讨论】:
-
目前,当函数创建和装饰时,实例(甚至类)还不存在,所以你不能那样做。可以做什么,取决于
action应该做什么。 -
action 是一个基类方法。有许多派生类,每个派生类都有一个执行特定操作的方法。在每个操作之前和之后,我都需要做一些我在基类方法中编写的操作。但是在每个派生类中,我都必须重复该代码。因此,我在基类中创建了一个名为 action 的方法,它将充当装饰器。
-
@gliese581g:装饰器是否需要知道该方法是在哪个类上定义的?
-
@gliese581g:那为什么要让它成为课程的一部分完全?
-
@gliese581g:只需将其作为
Base类的next 函数,并将其与Base一起导入即可。给它一个前导的下划线名称,这样from module import *就不会包含它,任何值得一提的 Python 开发人员都会将其识别为私有实用程序函数。
标签: python decorator python-decorators