2013年6月14日金曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7)のIV部(クラスとオブジェクト指向プログラミング)、まとめ演習3.(サブクラスの作成)を解いてみる。

その他参考書籍

まとめ演習3.(サブクラスの作成)

sample.py

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

class MyList(list):
    def __add__(self, y): # 加算演算子をカスタマイズ
        return (list.__add__(self, y), [self, y])

class MyListSub(MyList):
    count = 0
    def __init__(self, data):
        MyList.__init__(self, data)
        self.count = 0
    def displayCount(self):
        print("クラス: {0}回 インスタンス: {1}".format(
            MyListSub.count, self.count))
    def __add__(self, y):
        MyListSub.count += 1
        self.count += 1
        print("「+」演算子オーバーロードのためのフックメソッド")
        return MyList.__add__(self, y)

if __name__ == '__main__':
    even = MyListSub([2, 4, 6, 8, 10])
    odd = MyListSub([1, 3, 5, 7, 9])
    ml = MyListSub([1,2,3,4,5,6,7,8,9,10])
    l = [1,2]
    for x in [("even", even), ("odd", odd), ("ml", ml)]:
        print("{0} = {1}".format(x[0], x[1]))
    print("even + odd = {0}".format(even + odd))
    print("odd + even = {0}".format(odd + even))
    even.append(5)
    print(type(even))
    print("ml + l = {0}".format(even + l))
    for x in [("even", even), ("odd", odd), ("ml", ml)]:
        print(x[0], end=" ")
        x[1].displayCount()

入出力結果(Terminal)

$ ./sample.py
even = [2, 4, 6, 8, 10]
odd = [1, 3, 5, 7, 9]
ml = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
「+」演算子オーバーロードのためのフックメソッド
even + odd = ([2, 4, 6, 8, 10, 1, 3, 5, 7, 9], [[2, 4, 6, 8, 10], [1, 3, 5, 7, 9]])
「+」演算子オーバーロードのためのフックメソッド
odd + even = ([1, 3, 5, 7, 9, 2, 4, 6, 8, 10], [[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]])
<class '__main__.MyListSub'>
「+」演算子オーバーロードのためのフックメソッド
ml + l = ([2, 4, 6, 8, 10, 5, 1, 2], [[2, 4, 6, 8, 10, 5], [1, 2]])
even クラス: 3回 インスタンス: 2
odd クラス: 3回 インスタンス: 1
ml クラス: 3回 インスタンス: 0
$

0 コメント:

コメントを投稿