クラスについて

Python

自分の中で未だに謎のクラスについて、なんとなくヒントになりそうなことを書き連ねていきます。

クラスは振る舞い(関数)と状態(変数)をパッケージ化したもの。
「クラス関数」や「クラス変数」と呼んでいたのが、いつの間にか「クラス」と「属性」と呼ばれるようになった。

インスタンス化とは、「クラスを呼び出してオブジェクトを生成する。」こと。

例えば下のようなクラスと書いてみる。

>>> class AnoTanuki:
>>>     pass

そして実行すると….

何も起こらない!

んで、このクラスからオブジェクトを生成してみる。

>>> a=AnoTanuki()
>>> b=AnoTanuki()

ここでこのオブジェクトaとbは振る舞い(クラスで定義したメソッド)を共有しますが、状態(属性)は共有せずに、それぞれのコピーを持ちます。

コントラクタはオブジェクトを最初に生成したときの動作を定義できる特殊なメソッド。
Pythonで言うなら__init__とか__repr__とか

__init__はメソッドで、関数と同様なので、どんな数の引数値でも渡せます。

__repr__ メソッド「Return the canonical string representation of the object」(オブジェクトの印字可能な表現を含む文字列を返す)、つまりオブジェクトの文字列バージョンを返す必要がある。

とりあえず、なんか簡単なクラスを書いて実行したら、なんとなくわかるかも。
(初期値を入力する、もしくはa=0, b=1で、add()の関数を呼び出すたびに数字が足されるクラス)

>>> class AddNumber:
>>>     def __init__(self, a=0, b=1):
>>>         self.a=a
>>>         self.b=b
>>>     def add(self):
>>>         self.a += self.b
>>>     def __repr__(self):
>>>         return str(self.a)

んで、実行してみる。

>>> a=AddNumber()
>>> b=AddNumber(100)
>>> c=AddNumber(100, 10)
>>> a
0
>>> a.add()
>>> a
1
>>> b
100
>>> b.add()
101
>>> c
100
>>> c.add()
110

こんな感じの動きをする。入力値をselfとして表現して、初期値設定した上で関数とreturnで構成するのがクラスらしい。

うわ〜。なんの説明にもなっていない文章となりました。すみません。最後に役立ちそうな情報だけ載せておきます。

スポンサーリンク

クラスと関数の名前について

Pythonのクラスの名前にはキャメルケース(AnoTanukiとかAreTotteとか、大文字から開始される単語の連結)を使うと言う規約が定着しています。一方、関数の名前には、onigiriとかgoma_dangoとか小文字と_を使用することが定着しています。自分のコードが他の人にも読まれることもあると思うので、このルールに沿ってカキカキしましょう。

Head First Python 第2版 ―頭とからだで覚えるPythonの基本 | Paul Barry, 嶋田 健志, 木下 哲也 |本 | 通販 | Amazon
AmazonでPaul Barry, 嶋田 健志, 木下 哲也のHead First Python 第2版 ―頭とからだで覚えるPythonの基本。アマゾンならポイント還元本が多数。Paul Barry, 嶋田 健志, 木下 哲也作品ほか、お急ぎ便対象商品は当日お届けも可能。またHead First Python 第2...
入門 Python 3 | Bill Lubanovic, 斎藤 康毅, 長尾 高弘 |本 | 通販 | Amazon
AmazonでBill Lubanovic, 斎藤 康毅, 長尾 高弘の入門 Python 3。アマゾンならポイント還元本が多数。Bill Lubanovic, 斎藤 康毅, 長尾 高弘作品ほか、お急ぎ便対象商品は当日お届けも可能。また入門 Python 3もアマゾン配送商品なら通常配送無料。
タイトルとURLをコピーしました