コンストラクタ(__init__)の利用方法
以下の流れで、クラスからインスタンスは作成される。
オブジェクトを初期化する際に呼び出されるメソッドをコンストラクタと言い、pythonの場合__init__というメソッドが呼び出される。
例えば、クラスのプロパティの初期化の際に用いられる。
- コンストラクタの定義
def __init__(self, msg): # コンストラクタ
print("コンストラクタが呼び出されました")
self.msg = msg # プロパティmsgを引数msgで初期化
self.msg2 = "Message" # 初期値を設定
def print_msg(self):
print(self.msg) # プロパティmsgを表示
sample = SampleClass("Hello World")
# インスタンス作成時にコンストラクタ__init__を実行
# "コンストラクタが呼び出されました"と表示後、msgに"Hello World", msg2に"Message"を格納
sample.print_msg()
# インスタンスsampleのprint_msgメソッドを実行。プロパティmsgは"Hello World"なので、print(self.msg)で"Hello World"と表示
デストラクタ(__del__)の利用方法
デストラクタはオブジェクトが削除される際に呼び出されるメソッドである。
pythonでは、__del__として定義をする。
def __del__(self):
pass
- コンストラクタの定義
def __del__(self):
print("delが呼び出されました。")
del1 = DelSample()
del del1
# del インスタン名とすると、インスタンスが削除され__del__が呼び出さる。"delが呼び出されました。"が表示
__new__の利用方法
__new__は、特殊メソッドの1つで、オブジェクト作成時に呼び出されるメソッドである。
__new__は、スタティックメソッドで、clsを第1引数にしてclassの初期化のために利用される。
- __new__の定義方法(newで自身のインスタンスを返すようにするとその後、そのコンストラクタを呼び出す)
def __new__(cls):
print("new is called")
return super().__new__(cls) # 親クラスの__new__を呼び出して、返り値をreturnする
def __init__(self): # __new__の後に呼ばれる
print("Init is called")
MyClass() # new is called → Init is calledと表示される
- __new__の定義方法(newでインスタンスを返すようにするとその後、そのインスタンスのコンストラクタを呼び出す)
def __new__(cls):
print("new is called")
return 'msg' # 文字列を返す。__init__はそのあと呼び出されない
def __init__(self): # 実行されない
self.name='A'
print("Init is called")
MyClass() # new is calledと表示