開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs(Text Editor)
- プログラミング言語: Python
『初めての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 コメント:
コメントを投稿