プログラムを、データとその操作をひとつのまとまりとして(関連付けて)扱う手法をオブジェクト指向と言います。Pythonには、ユーザー独自のオブジェクトを作る仕組み=クラス定義が用意されています。
クラスでは、新しいオブジェクトの型とその型を持つインスタンスが作れます。その上、そのインスタンスに対する個別の処理もメソッドとして作成できます。
クラス定義
クラスの書き方
クラスは、オブジェクトの設計図です。
※使用する前に置かなければなりません。
class クラスの名前:
"""コメント"""
ステートメント
クラスの名前
CapWordsを慣習的に使います。
・名詞
・単語の先頭は大文字
・単語は区切らず次の単語の先頭を大文字にして繋ぐ
(例) MyFairLady
コメント
”””(3重クォート)で挟んでコメントを書くことができます。
(※__doc__を使って読み出すことができます。)
ステートメント
定義を書きます。
クラス変数
最も簡単なものは、クラス名を持つ変数を作るものです。
>>> class Pai:
... Pai = 3.141592
...
>>> Pai.Pai
3.141592
クラス変数は代入で書き換えることができます。クラス名が冠される以外、普通の変数と変わりません。
>>> Pai.Pai = 3.14
>>> Pai.Pai
3.14
インスタンス変数
新しい変数型を作り、独自型のインスタンス生成を可能にします。
def __init__(self[, 引数1, 引数2,‥]):
self.属性1 = 引数1
self.属性2 = 引数2
‥
引数
インスタンスへ渡すデータ(値)を持つ変数です。
属性
クラスへ引き渡すデータのクラスでの名前(変数名=プロパティ)です。分かりやすくするため、引数と同一名にします。
self キーワード
インスタンスの属性やメソッドへの値の引き渡しや引き受けのために使われる特殊な変数です。
__init__() メソッド
初期化専用のメソッド、コンストラクタと呼ばれることもあります。インスタンスが生成されるときに呼び出されて、インスタンスを初期化します。
初期化により新しいオブジェクト作成が可能なインスタンスが使えるようになります。
>>> class Busho:
... def __init__(self, name, leadership, management):
... self.name = name
... self.leadership = leadership
... self.management = management
...
>>> Oda = Busho("織田信長", 9, 10)
>>> print(Oda.name, Oda.leadership, Oda.management)
織田信長 9 10
Odaというインスタンスが作られました。
メソッド
クラス定義の専用関数を作ります。
def メソッド1(self):
機能1(self[.属性1])
def メソッド2(self):
機能2(self[.属性2])
‥
メソッド
メソッドの名前です。
機能
施す処理を書きます。
属性
インスタンスで定義した属性名と同じものにします。複数の属性を組み合わせて値を求めても構いません。
※属性を持たせなければ、クラス関数になります。
>>> class Dubble:
... def dubble(self):
... return self * 2
...
>>> Dubble.dubble(5)
10
クラス関数も書き換えが可能です。クラス名が冠される以外、普通の関数と変わりません。
>>> Dubble.dubble = lambda self: self * 4
>>> Dubble.dubble(3)
12
自由に後から書き換えが可能な性質は「動的」と呼ばれます。
※属性定義されたメソッドはクラス関数ではなく、インスタンス関数(メソッド)となります。
>>> class Koku:
... def __init__(self, kokumei, kokudaka):
... self.kokumei = kokumei
... self.kokudaka = kokudaka
...
... def douin(self):
... return (self.kokudaka // 4000) * 100
...
... def __str__(self):
... return f"{self.kokumei} 国: {self.kokudaka} 石: {self.douin()} 人"
...
>>> suruga = Koku("駿河", 150000)
>>> print(suruga)
駿河 国: 150000 石: 3700 人
メッソド呼び出し
>>> suruga.douin()
3700
__str__() メソッド
文字列化のメソッド。インスタンスを文字列に変換する際のフォーマットを定義します。print関数で表示された際に適用されます。
ユーザー型の確認
>>> type(Koku)
<class 'type'>
>>> type(suruga)
<class '__main__.Koku'>
クラスは、typeのインスタンスであることが分かります。また、ユーザー定義のインスタンスも新しい型(__main__.~)を持つことが分かります。
__main__ 特別な名前
プログラムのトップレベル環境の名前を示します。上の例では、コンソールの環境で実行されたことを表しています。