2013年4月6日土曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のVI部(クラスとオブジェクト指向プログラミング)の26章(クラスに関する高度なテクニック)の練習問題2を解いてみる。

その他参考書籍

2.

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

class decorator:
    def __init__(self, func):
        self.calls = 0
        self.func = func

    def __call__(self, *args):
        self.calls += 1
        print("call {0} to {1}".format(self.calls, self.func.__name__))
        self.func(*args)

# 関数デコレータ
# 関数に別の関数に書かれたロジックを付加
@decorator
def f(a, b):
    print(a, b)

f(1,2)
f('a','b')
f(3,4)
f('c','d')

# 関数デコレータ無しで同じ機能を記述

def g(a, b):
    print(a, b)
g = decorator(g)

g(1,2)
g('a','b')
g(3,4)
g('c','d')

入出力結果(Terminal)

$ ./sample.py
call 1 to f
1 2
call 2 to f
a b
call 3 to f
3 4
call 4 to f
c d
call 1 to g
1 2
call 2 to g
a b
call 3 to g
3 4
call 4 to g
c d
$

0 コメント:

コメントを投稿