python类方法为装饰器_类方法的python装饰器

这篇博客探讨了一个Python装饰器的实现,用于注册类方法并控制其运行。`Task`类定义了一个静态方法`register`作为装饰器,用于装饰`Test`类中的`foo`和`hello`方法。装饰器内部处理了`run`参数,允许在不执行方法时记录方法信息。在`Test`类的`load`方法中,`foo`和`hello`被调用时传入`run=False`以避免实际执行,而是记录任务信息。
摘要由CSDN通过智能技术生成

我有一个装饰器来注册一些类方法 . 如何正确获取 self 和 run 参数?

class Task(object):

_tasks = []

@staticmethod

def register(name):

def decorator(fn):

@wraps(fn)

def wrapper(self=None, run=True, *args, **kwargs):

if not run:

task = defaultdict()

task['name'] = name

task['fn'] = getattr(self, fn.__name__, None)

task['obj'] = self

task['args'] = deepcopy(args)

task['kwargs'] = deepcopy(kwargs)

Task._tasks.append(task)

else:

return fn(self, *args, **kwargs)

return wrapper

return decorator

class Test(object):

def __init__(self, name):

self.name = name

@Task.register('foo')

def foo(self, v1, v2):

print 'running foo in object {} with arguments {} {}'.format(self.name, v1, v2)

@Task.register('hello')

def hello(self):

print 'running hello in object {} '.format(self.name)

def load(self):

self.foo('1', '2', run=False)

self.hello(run=False)

t1=Test('t1')

t1.load()

回溯(最近的呼叫最后):

TypeError: wrapper() got multiple values for keyword argument 'run'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值