開発環境
- 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 コメント:
コメントを投稿