開発環境
- 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部(クラスとオブジェクト指向プログラミング)、22章(Pythonでのオブジェクト指向プログラミング)の練習問題を解いてみる。
その他参考書籍
1.
コードの再利用。
2.
ダイアモンド継承の場合に、python2.xとpython3.xでオブジェクトツリーの属性の検索の順序の違いに注意が必要。
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- class A: def __init__(self): self.data = "A" class B(A): def __init__(self): self.data = "B" class C(A): pass class D(C, B): pass o = D() # python3.3ではD、C、B、Aの順序で検索されるので、B # python2.7ではD、C、A、B、Aの順序で検索されるので、A print(o.data)
入出力結果(Terminal)
$ ./sample.py B $ python2.7 sample.py A $
python2.7、python3.3で同じ結果になる書き方。
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- class A: def __init__(self): self.data = "A" class B(A): def __init__(self): self.data = "B" class C(A): pass class D(C, B): def __init__(self): a = A() self.data = a.data o = D() # python3.3ではD、C、B、Aの順序で検索されるので、B # python2.7ではD、C、A、B、Aの順序で検索されるので、A print(o.data)
入出力結果(Terminal)
$ ./sample.py A $ python2.7 sample.py A $
3.
クラスオブジェクトを使ってインスタンスオブジェクトを作る。
4.
そのメソッドを呼び出したインスタンスになる。なんでもいいけど、selfと書くのが習慣。
5.
インスタンス作成時に自動的に実行される。初期化。
6.
クラスを呼び出す(クラス名())ことで作成できる。
7.
classステートメントを使って作成する。
8.
classステートメントで、class クラス名(継承したいスーパークラス名[, ])で指定できる。
0 コメント:
コメントを投稿