python3 类函数,在Python3中动态修饰类内部的函数

@John Montgommery properly answered @Eli Bendersky 's question that you can dynamically create a class with function using this logic:

class Dynamo(object):

pass

def add_dynamo(cls,i):

def innerdynamo(self):

print "in dynamo %d" % i

innerdynamo.__doc__ = "docstring for dynamo%d" % i

innerdynamo.__name__ = "dynamo%d" % i

setattr(cls,innerdynamo.__name__,innerdynamo)

for i in range(2):

add_dynamo(Dynamo, i)

d=Dynamo()

d.dynamo0()

d.dynamo1()

My question is: How do you decorate the resulting functions within that class with a decorator that needs a parameter?

eg:

Static function definition:

class MyTaskSequence(TaskSequence):

@seq_task(1)

def sequence1(self):

self.client.get("/devops/")

@seq_task(2)

def sequence2(self):

self.client.get("/blog/")

What I tried:

class MyTaskSequence(TaskSequence):

pass

def add_sequence(cls, order, path):

def sequence(self):

self.client.get(path)

sequence.__name__ = "sequence%d" % order

setattr(cls, sequence.__name__, seq_task(order)(sequence))

add_sequence(MyTaskSequence, 1, "/devops/")

add_sequence(MyTaskSequence, 2, "/blog/")

解决方案

You can directly apply the decorator when creating the method:

def add_sequence(cls, order, path):

@seq_task(order)

def sequence(self):

self.client.get(path)

sequence.__name__ = "sequence%d" % order

setattr(cls, sequence.__name__, sequence)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值