如何将类参数传递给装饰器?

时间:2017-07-16 15:08:16

标签: python

这是一个Python问题。

我在util文件中编写了一个装饰器,然后我定义了一个带有一些成员函数的类,我想用装饰器装饰的函数之一,而装饰器有一个控制代码运行的参数。当我装饰成员函数时,我只想给出一个类成员值或一个类实例值,如何实现它?

1 个答案:

答案 0 :(得分:1)

由于您的问题中没有示例代码,因此不确定您要问的是什么,但这是猜测:

import functools
#from utilities import my_decorator  # in-lined below for simplicity

def my_decorator(control):
    def wrapper(function):
        " Do something with function or before and after it returns. """

        @functools.wraps(function)
        def wrapped(*args, **kwargs):
            print('doing something with {!r} control before calling {}()'.format(
                    control, function.__name__))
            return function(*args, **kwargs)

        return wrapped

    return wrapper


class Test(object):
    def foo(self):
        print('in method foo')

    @my_decorator('baz')
    def bar(self):
        print('in method bar')


test = Test()
test.foo()
test.bar()

输出:

in method foo
doing something with 'baz' control before calling bar()
in method bar