python装饰器参数[重复]

Posted

技术标签:

【中文标题】python装饰器参数[重复]【英文标题】:python decorator arguments [duplicate] 【发布时间】:2013-02-16 18:28:58 【问题描述】:

python 装饰器函数是否支持参数以及实现方式如何

def decorator(fn, decorArg):
    print "I'm decorating!"
    print decorArg
    return fn

class MyClass(object):
    def __init__(self):
        self.list = []

    @decorator
    def my_function(self, funcArg = None):
        print "Hi"
        print funcArg

运行时出现此错误

TypeError: decorator() takes exactly 2 arguments (1 given)

我尝试过 @decorator(arg) 或 @decorator arg 。它也不起作用。到目前为止,我想知道这是否可能

【问题讨论】:

是的,但是您的示例似乎表明您不了解装饰器的工作原理。例如,您是否阅读过this?你想让你的装饰师做什么? 您应该阅读这篇文章以便更好地了解如何使用装饰器:***.com/questions/739654/… 【参考方案1】:

我想你可能想要这样的东西:

class decorator:
    def __init__ (self, decorArg):
        self.arg = decorArg

    def __call__ (self, fn):
        print "I'm decoratin!"
        print self.arg
        return fn

class MyClass (object):
    def __init__ (self):
        self.list = []

    @decorator ("foo")
    def my_function (self, funcArg = None):
        print "Hi"
        print funcArg

MyClass ().my_function ("bar")

或者像 BlackNight 指出的那样使用嵌套函数:

def decorator (decorArg):
    def f (fn):
        print "I'm decoratin!"
        print decorArg
        return fn
    return f

【讨论】:

你也可以使用嵌套函数,而不是装饰器类。唉,Python 的缩进要求不允许我在 cmets 中输入示例。

以上是关于python装饰器参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python装饰器

Python装饰器,自我混淆[重复]

Python装饰器,自我混淆[重复]

[python] 之 装饰器

python 装饰器 TypeError 缺少 1 个必需的位置参数

Python装饰器