2013年6月3日月曜日

開発環境

『初めての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 コメント:

コメントを投稿