首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python3中动态修饰类内的函数

在Python3中动态修饰类内的函数
EN

Stack Overflow用户
提问于 2019-10-05 15:58:06
回答 1查看 41关注 0票数 0

这是Dynamic/runtime method creation (code generation) in Python的扩展

@John Montgommery正确地回答了@Eli Bendersky的问题,即您可以使用以下逻辑动态创建具有函数的类:

代码语言:javascript
复制
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()

我的问题是:如何使用需要参数的装饰器来修饰该类中的结果函数?

例如:静态函数定义:

代码语言:javascript
复制
class MyTaskSequence(TaskSequence):
    @seq_task(1)
    def sequence1(self):
        self.client.get("/devops/")

    @seq_task(2)
    def sequence2(self):
        self.client.get("/blog/")

我尝试过的:

代码语言:javascript
复制
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/")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-05 16:06:02

您可以在创建方法时直接应用装饰器:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58246463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档