看到文章 ( 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的格式是這樣的:
參考資料《Learning Python 5E》page1277-1278
所以,問題中class decorator的定義是完全錯的。
應該是以下形式:
sy
是一個class
。實作__call__
方法.