当前位置:  开发笔记 > 编程语言 > 正文

装饰者和课堂上

如何解决《装饰者和课堂上》经验,为你挑选了1个好方法。

有没有办法在嵌套好的类结构中编写装饰器?例如,没有类,这可以正常工作:

def wrap1(func):
    def loc(*args,**kwargs):
        print 1
        return func(*args,**kwargs)
    return loc

def wrap2(func):
    def loc(*args,**kwargs):
        print 2
        return func(*args,**kwargs)
    return loc


def wrap3(func):
    def loc(*args,**kwargs):
        print 3
        return func(*args,**kwargs)
    return loc

def merger(func):
    return wrap1(wrap2(wrap3(func)))


@merger
def merged():
    print "merged"


@wrap1
@wrap2
@wrap3
def individually_wrapped():
    print "individually wrapped"

merged()
individually_wrapped()

输出是:

1
2
3
merged
1
2
3
individually wrapped

这就是我想要的.但是,现在让我们说,我想使mergedindividually_wrapped静态或类方法.只要装饰器不在类名称空间之外,这也可以工作.有没有什么好方法将装饰器放在命名空间中?我宁愿不列举所有不起作用的方法,但主要问题是如果merger是一个方法,它就无法访问这些wrapX方法.也许这是一个想要做的蠢事,但有没有人得到这样的东西工作,所有装饰器和装饰方法在同一个类?



1> S.Lott..:

"有没有什么好方法可以将装饰器放在命名空间中?"

这没有令人信服的理由.你有模块文件.这些是一个类和一些装饰器的整洁容器.

你不需要装饰器作为类的方法 - 你可以从另一个方法中调用一个方法.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有