python - 关于修饰类 @class
天蓬老师
天蓬老师 2017-04-17 14:43:44
0
2
586

看到文章 ( 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)
阿神

@一般的に使用されないニックネーム。教えてください。議論歓迎

私の理解が正しければ、元の投稿「2. 装飾クラス: 装飾されるオブジェクトはクラスです」の装飾クラス の元の英語名は、クラス デコレーター になるはずです。強い>。
構文要件に従って、クラス デコレータの形式は次のとおりです。

#定義
デフォルトデコレータ(C):
#プロセスクラスC
    Cを返す

#使用
@デコレータ
クラスC:...

参考資料「Python 5E を学ぶ」1277 ~ 1278 ページ

つまり、質問内のクラスデコレータの定義は完全に間違っています。
次の形式にする必要があります:

def テスト(cls):
    クラスC():
#ここにクラス C の定義を入力します。 
    Cを返す
いいねを押す +0
Peter_Zhu

syclass です。 __call__ メソッドを実装します。

 クラス Sy(オブジェクト):
    値=32

    def __call__(self, _class):
        合格
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート