開発環境
- 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部(クラスとオブジェクト指向プログラミング)、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 コメント:
コメントを投稿