玩蛇网提供最新Python编程技术信息以及Python资源下载!

关于Python修饰类@class的求助

看到文章 ( http://mp.weixin.qq.com/s?__biz=MjM5NzU0MzU0Nw==&mid=206275292&idx=1&sn=245ffc6b543c323adc4ed8ac54942e24&scene=5#rd)
修饰类部分,

[1]装饰器无参数:
a.被装饰对象无参数:
 1 >>> def test(cls):
 2     def _test():
 3         clsName=re.findall("(w+)",repr(cls))[-1]
 4         print "Call %s.__init()."%clsName
 5         return cls()
 6     return _test
 7 
 8 >>> @test
 9 class sy(object):
10     value=32
11 
12     
13 >>> s=sy()
14 Call sy.__init().
15 >>> s
16 <__main__.sy object at 0x0000000002C3E390>
17 >>> s.value
18 32
19 >>> 

在我的环境 执行出错.
提示

TypeError: 'sy' object is not callable

py版本如下

$ python -V
Python 2.7.9

请问什么会出错? 正确修饰类的应该如何使用?

@不常用昵称 。我来说说,欢迎探讨


如果我理解的正确的话,原帖子中“2.装饰类:被装饰的对象是一个类”的装饰类英文原称应该是Class Decorators
根据语法要求,class decorators的格式是这样的:

#定义
def decorator(C):
#process class C
    return C

#使用
@decorator
class C:...    

参考资料《Learning Python 5E》page1277-1278

所以,问题中class decorator的定义是完全错的。
应该是如下形式:

def test(cls):
    class C():
#   class C 的定义填在这里。 
    return C

sy 是一个 class。实现 __call__ 方法.

 class Sy(object):
    value=32

    def __call__(self, _class):
        pass

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd18843.html

相关文章 Recommend

玩蛇网Python互助QQ群,欢迎加入-->: 106381465 玩蛇网Python新手群
修订日期:2017年05月23日 - 16时39分51秒 发布自玩蛇网

您现在的位置: 玩蛇网首页 > Python问题解答 > 正文内容
我要分享到:

必知PYTHON教程 Must Know PYTHON Tutorials

必知PYTHON模块 Must Know PYTHON Modules