【学習記録】Python基礎 init

Pythonのinitについて勉強しました。
今の自分のレベルとしては、他の人が書いたコードを読んでてなんとなくinitの使い方のイメージはあるのものの細かい説明まではできない感じなので、ちゃんと基礎から理解していきたいと思います。

以下学んだことを箇条書きでメモします。 こちらのページの内容を参考にしています。

www.w3schools.com

initについて以下の説明がありました。

To understand the meaning of classes we have to understand the built-in init() function.
All classes have a function called init(), which is always executed when the class is being initiated.
Use the init() function to assign values to object properties, or other operations that are necessary to do when the object is being created:

クラスの意味を理解するにはビルトインのinit関数を理解する必要がある。
すべてのクラスはinit関数を持っていて、クラスがインスタンス化される際にinitが呼び出される。
init関数を使ってオブジェクトのプロパティに値を入れることができたり、その他のオブジェクトが作成される時に必要な処理を書くことができる。

下記はサンプルのinitを使用してUserクラスのnameとageに値を代入する例:

class User:
  def __init__(self, name, age):
    self.name = name
    self.age = age

u1 = User("user1", 10)

print(u1.name)
print(u1.age)

ローカルで動作確認。
想定通り値が出力されました。
f:id:JunpeiNakasone:20210308064405p:plain

参考までにデバッガーで処理を途中で止めてみたら、Userクラスでageとnameの項目はなく、u1オブジェクトでageとnameの値があるのが確認できました。
->initの動きを理解するのに直接は関係ないかも知れないが、デバッガーでどう表示されるのか一応把握しておいた方がより具体的にイメージしやすそうだと考えている。

また、参考ページには注意書きで以下の文言がありました。

Note: The init() function is called automatically every time the class is being used to create a new object.

新しいをオブジェクトを作成するためクラスが使用される際に、init関数は自動的に呼び出されるとのこと。

気になったのでinit関数で指定されているプロパティを指定しない場合どうなるのか試してみました。

class User:
  def __init__(self, name, age):
    self.name = name
    self.age = age

u1 = User("user1") # ageを指定しない

print(u1.name)

ローカルで動作確認。
f:id:JunpeiNakasone:20210308070049p:plain

必要な項目が足りない、という内容で以下のエラーが出ていました。

TypeError: __init__() missing 1 required positional argument: 'age'

引き続きPythonの基礎を勉強していきたいと思います。