2013年6月4日火曜日

開発環境

『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7)のIV部(クラスとオブジェクト指向プログラミング)、23章(クラスのコーディング (基礎))の練習問題を解いてみる。

その他参考書籍

1.

モジュールの中にクラスがある。

例: sampleモジュールのAクラス。

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

class A: pass

2.

インスタンスを作るにはクラスを呼び出せばいい。クラスをツルルにはclassステートメントを使えばいい。

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

# クラスの作成
class A:
    def __init__(self):
        print("Hello, Instance!")

# インスタンスの作成
i = A()

入出力結果(Terminal)

$ ./sample.py
Hello, Instance!
$

3.

クラスの属性は、classステートメントの中で定義する。後から追加することも出来る。

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

# クラスの作成
class A:
    # クラスの属性
    a = "spam"
    def f():
        print("Hello, f!")
print(A.a)
A.f()

# 属性の追加
A.b = "egg"

print(A.b)

# 上書きも出来る
A.a = "foo"

def g():
    print("Hello, g!")

A.f = g

print(A.a)
A.f()

入出力結果(Terminal)

$ ./sample.py
spam
Hello, f!
egg
foo
Hello, g!
$

4.

インスタンス属の属性は、クラスステートメントの中のメソッド(第1引数はself(インスタンス自身。慣例でselfなだけで、なんでもいい)の中で作る。

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

# クラスの作成
class A:
    def __init__(self, data):
        # インスタンス属性の作成
        self.a = "Hello, World!"
        self.b = data
    def f(self, data):
        self.c = data
        self.d = "foo"

a = A("spam")

print(a.a, a.b)

a.f("egg")

print(a.c, a.d)

入出力結果(Terminal)

$ ./sample.py
Hello, World! spam
egg foo
$

5.

selfはインスタンスオブジェクトを意味する。

6.

対応するメソッドを上書きすればいい。

例: +演算子をオーバーロードして掛け算にする。(本来は意味の無い、良くないオーバーロード。機能確認のため。)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

# クラスの作成
class A(int):
    def __add__(self, y):
        return self * y

a = A(5)
print(a + 10)

入出力結果(Terminal)

$ ./sample.py
50
$

7.

クラスのインスタンスオブジェクトに、自然な演算を定義するため。

8.

__init__メソッド。

9.

第1引数selfと__init__メソッド。

0 コメント:

コメントを投稿