概要
メモ代わりにPythonのクラス定義関連についてまとめていきます。
クラス定義
- 下記は単純なクラス「Car」を定義し、それをローカルで呼び出しているコードです。
- ここでクラス内の関数「run」は「メソッド」と呼ばれます。
- ローカル変数myclassは、クラスという定義(概念)を具現化した「オブジェクト」を代入した変数です。
- この「オブジェクト」はたびたび「インスタンス」とも呼ばれます。
- ややこしいのですが、とりあえずPyhtonにおいては、オブジェクト=インスタンスという考えで話を進めていきます。
- クラス定義内の「self」とは上記のインスタンスを指しています。
classtest1.py
# クラスの定義
class Car(object):
def run(self):
print('run')
# インスタンスを生成し、そのオブジェクトをローカル変数へ代入
mycar = Car()
mycar.run()
ここでクラス定義の引数「object」は書かなくてもエラーにはなりません。
classtest1.py
class Car():
ただ一般的には書いたほうが良いとされるそうです。
ちなみに、「継承」という機能を使う際には、ここに継承元となるクラス名を記述します。
オブジェクトの初期化と破壊
- 下記ではクラスを初期化と破壊時の処理を追加しています。
- メソッド「__init__」はオブジェクトが生成された時,最初に呼び出され初期化処理を行う特殊な関数です。これをコンストラクタといいます。
- メソッド「__del__」はオブジェクトが破壊された時,最初に呼び出され破壊時処理を行う特殊な関数です。これをデストラクタといいます。
- del [オブジェクト名] と書くとオブジェクトを破壊できる。
classtest2.py
# クラスの定義
class Car(object):
self.color
# コンストラクタで初期化
def __init__(self, color):
self.color = color
def run(self):
print('run')
# デストラクタで破壊時処理を設定
def __del__(self):
print("stop");
# インスタンスを生成し、そのオブジェクトをローカル変数へ代入
# コンストラクタが呼ばれオブジェクトが初期化される
mycar = Car('red')
# 初期化によって設定したデータを表示
print(mycar.color)
# オブジェクトを破壊。デストラクタが呼ばれる
del mycar
- オブジェクトが生成された際にmycarの「color」に「red」というデータが設定されます。
- オブジェクトが破壊された際に「stop」と表示されます。