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