今年は開発もして、業務改善活動を行いました。むかーし、新人研修で学んだコンストラクタとかそういうのが出てきたので、学び直ししました。
コンストラクタとは?
オブジェクト生成時に最初に実行される、「初期化用の特殊な関数」のことです。Pythonでは、コンストラクタは、「__init__()
」という名前で定義するのがルールです。
https://xtech.nikkei.com/atcl/learning/lecture/19/00108/00005/
メソッドとは?
処理のまとまりに名前を付けたもの
https://xtech.nikkei.com/atcl/learning/lecture/19/00108/00005/?P=2
理解するためのコード例
class Dog:
def __init__(self, name, age):
# コンストラクタ:オブジェクトが作成される際に自動的に呼び出される
# オブジェクトの属性を初期化する
self.name = name
self.age = age
def bark(self):
# 通常のメソッド:明示的に呼び出さない限り実行されない
# オブジェクトの振る舞いを定義する
message = f"{self.name}, {self.age} years old, says woof!"
return message
def main():
# オブジェクトを作成(コンストラクタが呼び出される)
my_dog = Dog("Pochi", 2)
# メソッドを呼び出す
message = my_dog.bark()
#2歳のポチが吠える!
print(message)
#太郎ちゃんも吠えたい。
my_dog.name = "Taro"
#名前が変更されたことを確認
print(my_dog.name)
#2歳の太郎が吠える!
message = my_dog.bark()
print(message)
if __name__ == "__main__":
main()
(実行結果)
Pochi, 2 years old, says woof!
Taro
Taro, 2 years old, says woof!
流れを追ってみましょう
(1) コンストラクタは下記で呼び出されます。
my_dog = Dog("Pochi", 2)
NEWするときに自動的にコンストラクタが呼び出されます(とJava研修のときに習った記憶がある)
指定した値に代入されます。
name = Pochi
age = 2
(2)my_dogをbarkメソッドに渡して処理をさせます。戻り値は変数messageで受けます。
my_dogに名前と年齢が入っているので個別で引数に渡す必要はありません。
message = my_dog.bark()
メソッドで定義している処理はこちら。値はmy_dogにセットされています(name = Pochi,age = 2)。
処理結果はreturnで呼び出し元(mainメソッド)へ返されます。
message = f"{self.name}, {self.age} years old, says woof!"
return message
(3) 戻り値を出力します。
print(message)
(4)Dog()はいわば金物の型。格納する変数は自由に変更にできます。
#太郎ちゃんも吠えたい。
my_dog.name = "Taro"
#名前が変更されたことを確認
print(my_dog.name)
#2歳の太郎が吠える!
message = my_dog.bark()
print(message)