開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs(Text Editor)
- プログラミング言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のVI部(クラスとオブジェクト指向プログラミング)のまとめ演習2.(リストの機能のオーバーロード)を解いてみる。
その他参考書籍
2.(リストの機能のオーバーロード)
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- class MyList(list): def __add__(self, y): return MyList(list.__add__(self, y)) def __iadd__(self, y): return MyList(list.__iadd__(self, y)) def __imull__(self, y): return MyList(list.__imull__(self, y)) def __mul__(self, n): return MyList(list.__mul__(self, n)) def __rmull__(self, n): return MyList(list.__rmull__(self, n)) if __name__ == '__main__': a = MyList([1,2,3,4.5]) b = MyList([6,7,8,9,10]) c = a[:] d = a + ['a','b'] e = ['a','b'] + a f = a + b g = a[1:5] h = a[2] for x in [a, b, c, d, e, f, g, h]: print(x, type(x))
入出力結果(Terminal)
$ ./sample.py [1, 2, 3, 4.5] <class '__main__.MyList'> [6, 7, 8, 9, 10] <class '__main__.MyList'> [1, 2, 3, 4.5] <class 'list'> [1, 2, 3, 4.5, 'a', 'b'] <class '__main__.MyList'> ['a', 'b', 1, 2, 3, 4.5] <class 'list'> [1, 2, 3, 4.5, 6, 7, 8, 9, 10] <class '__main__.MyList'> [2, 3, 4.5] <class 'list'> 3 <class 'int'> $
listを返す部分をMyListを返すようにしたかったけど、python2.xからpython3.xでフックメソッドがいくつか整理されたり変更されてるみたいで、help(list)等でいろいろ探してみた物の、それを見つける事ができずにいくつか(スライシング、加算の片方)はlistを返すままに。型を除いた結果は思ってた通りにできたので、とりあえず良しとすることに。
0 コメント:
コメントを投稿