開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7)のVI部(クラスとオブジェクト指向プログラミング)のまとめ演習の練習問題1(継承)を解いてみる。
1.
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 class Adder: def add(self, x, y): print "Not Implemented" class ListAdder(Adder): def add(self,l,m): return l+m class DictAdder(Adder): def add(self,d1,d2): d1.update(d2) return d1
入出力結果(Terminal)
$ python Python 2.7.2 (default, Feb 12 2012, 23:50:38) [GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from python_program import* >>> a=Adder() >>> b=ListAdder() >>> c=DictAdder() >>> a.add(1,2) Not Implemented >>> print b.add([1,2],[3,4,5]) [1, 2, 3, 4, 5] >>> print c.add({'a':1,'b':2},{'c':3,'d':4,'e':5}) {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} >>> ^D $
改造
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 class Adder: def __init__(self, data): self.data = data def __add__(self, other): return self.add(other) def add(self, other): print "Not Implemented" class ListAdder(Adder): def add(self,other): return self.data + other class DictAdder(Adder): def add(self,other): other.update(self.data) return other
入出力結果(Terminal)
$ python Python 2.7.2 (default, Feb 12 2012, 23:50:38) [GCC 4.2.1 Compatible Apple Clang 3.0 (tags/Apple/clang-211.12)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from python_program import * >>> a=Adder(1) >>> b=ListAdder([1,2]) >>> c=DictAdder({'a':1,'b':2}) >>> a+2 Not Implemented >>> print b+[3,4,5] [1, 2, 3, 4, 5] >>> print c+{'c':3,'d':4,'e':5} {'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4} >>> ^D $
addメソッドの中でインスタンス属性に保持された値と、引数として渡された値との連結を行う方法は、引数を2つにする方法よりクラスをより「オブジェクト指向的」にできる方法と言える。
0 コメント:
コメントを投稿