Pythonのクラスについて学習
Javaとの同じ点や異なる点を整理しながら、Pythonのクラスについて学習する。
クラス定義
class クラス名:
Javaとは異なり、publicとかの修飾子がクラスにはない。
属性
class クラス名:
属性名 = 値
Javaではインスタンス変数(非static変数)定義だが、Pythonではクラス変数(static変数)定義になる。
メソッド
以下の3種類ある。
- インスタンスメソッド
インスタンス化されて実行できるメソッド - クラスメソッド
@classmethod
デコレーターをメソッドに使う。Javaのstaticで定義したメソッドと同じ。
インスタンス化しなくても使えるという点は静的メソッドと同じ。
コンストラクタメソッドと同じようにインスタンス化したクラスを返却してくれるので、datetime.now()のような呼び出し側のコーディングで、目的や状態を分かりやすくするメリットがある。 - 静的メソッド
@staticmethod
デコレーターをメソッドに使うことで定義できる。インスタンス化せずに使うことができるものなので、Javaのstaticで定義したメソッドと同じ。
finalとかはないのだろうか。
特殊メソッド
アンダースコアを二つつけたメソッドで、__init__
や __add__
などの様々な種類がある.
__init__
はJavaのコンストラクタと同じ役割のメソッド。
__add__
のような演算子に関する特殊メソッドは、演算子による演算機能を追加することができる。
公式ドキュメント:https://docs.python.org/ja/3/reference/datamodel.html#special-method-names
プロパティ化
@property
デコレーターを追加することで、カッコをつけずにインスタンスメソッドを呼び出すことができるようになる。
可読性を向上させることができるようになる。プロパティ化という名前の通り、getterやsetterのような使い方をしたい場合に使うのが良さそう。