Python での クラス とインスタンスの説明。
クラス
クラスは データ(変数)と 操作(関数)をまとめたのです。
クラスは設計図なので 通常はそのまま使いません。
クラスからインスタンスと呼ばれる実体(オブジェクト)を生成して、インスタンスの方を使います。
ここらへんは どの言語も同じ。
class myClass: def Hello(self): print("Hello") m = myClass() # インスタンスの生成 m.Hello()
Hello
クラス内の関数のことをメソッドといいます。そして、メソッドの1番目の引数は、慣例で self にします。呼び出す際の引数は不要です。
self を 記述しないと
class myClass: def Hello(): # self 未記入 print("Hello") m = myClass() # ここでエラー m.Hello()
TypeError: Hello() takes 0 positional arguments but 1 was given
「Hello関数では引数が 0 の設定なのに 1つ 引数が指定されている」と エラーがでます。
m = myClass()
では 引数を指定していませんが、自動的に self(自分:インスタンス)が 引数として渡されているからです。
インスタンス化は 多くの言語で new を使いますが、Pythonでは 必要ないようです。インスタンスの破棄も必要ありません。自動のようです。
強制的に破棄したいなら
class myClass: def Hello(self): print("Hello") m = myClass() # インスタンスの生成 m.Hello() m = None # myClaseeの参照をやめたので、ここで破棄
でしょうか。
コンストラクタ
__init__ と言う名前のメソッド(関数)はコンストラクタと呼ばれ、インスタンス生成時に実行されます。
コンストラクタでは、初期化処理などを行います。
class myClass: def __init__(self): print("constructor") self.count = 10 def countup(self): self.count += 1 return self.count m = myClass() print(m.countup()) print(m.countup()) print(m.countup())
constructor 11 12 13
デストラクタ
__del__ という名前のメソッド(関数)は、デストラクタと呼ばれ、インスタンスが消滅する際に実行されます。
class myClass: def __init__(self): print("constructor") self.count = 10 def countup(self): self.count += 1 return self.count def __del__(self): print("destructor") m = myClass() print(m.countup()) print(m.countup()) print(m.countup())
constructor 11 12 13 destructor