python 中如何用装饰器装饰类的方法?

新手上路,请多包涵
def myzsq(func):
    def wraper():
        print 'begin'
        func()
        print 'end---'
    return wraper
class TestMyClass:
    def __test(self):
        print 'test-----123123-'
    @myzsq
    def run(self):
        self.__test()

t1 = TestMyClass()
t1.run()

报错了
Traceback (most recent call last):
File "D:\Program Files (x86)\JetBrains\PyCharm 4.0.5\helpers\pycharm\utrunner.py", line 116, in <module>

modules = [loadSource(a[0])]

File "D:\Program Files (x86)\JetBrains\PyCharm 4.0.5\helpers\pycharm\utrunner.py", line 40, in loadSource

module = imp.load_source(moduleName, fileName)

File "D:\python-test\testclass.py", line 35, in <module>

t1.run()

TypeError: wraper() takes no arguments (1 given)

阅读 7.1k
2 个回答

self 是参数

得用带参数的装饰器

def decorator(args):
    def _deco(func):
        def _func(self):
            print args
            print 'gooooo'
            func(self)
            print 'fooo'
        return _func

    return _deco
def log(func):
    def wrapper(self):
        print('log')
        func(self)
    return wrapper


class Test():
    @log
    def hello(self):
        print('hello')

t = Test()
t.hello()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题