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
コメント