gli*_*81g 2 python decorator python-decorators
我有一个班级,我有多种方法.我想使用其中一个方法作为其他方法的装饰器.为此,我使用以下语法:
@self.action
def execute(self,req):
Run Code Online (Sandbox Code Playgroud)
动作是我班上的其他方法.但它不起作用并抛出异常
name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)
在定义类时,不能使用类的方法 ; 没有self内部类也不是"烤"甚至还没有访问任何类的类.
您可以将方法视为用作装饰器的函数:
class SomeClass():
def action(func):
# decorate
return wrapper
@action
def execute(self, req):
# something
Run Code Online (Sandbox Code Playgroud)
如果action在基类上定义,那么您必须通过基类引用该名称:
class Base():
@staticmethod
def action(func):
# decorate
return wrapper
class Derived(Base):
@Base.action
def execute(self, req):
# something
Run Code Online (Sandbox Code Playgroud)
对于Python 2,你必须在action这里创建一个静态方法,否则你会得到一个未绑定的方法,如果没有实例作为第一个参数,你会抱怨你无法调用它.在Python 3中,您可以将@staticmethod装饰器留在那里,至少是为了装饰器的目的.
但请注意,action不能直接用作方法; 也许它不应该是那个阶段的一部分.它不是最终用户API的一部分,可能是这些类的实例的消费者不使用装饰器.
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |