現在、python の インスタンス化について勉強しています。
現在下記動画の1:02:01のところの理解で躓いているので、教えてください。
(リンク参照リンク内容)
下記のコードを書いたところでストップしています。
#メソッド定義 class Student : def avg(self, math, english): print((math + english)/2) --★a001 をインスタンス化 a001 = Student() a001.name = "sato" a001.avg(30,70) print(a001.name) --★a002 のインスタンス化 a002 = Student()
ここから質問です
(1)
この時、a002 = Student()については、a001.name = "sato"のように
アトリビュートを作成していないため、エラーとなる認識です。
この場合、このままだと毎回色々なインスタンスを複数作成する度に アトリビュートを作成する必要がある(例: a002 = "Takeshi" など)ため、
この手間を防ぐため、動画の1:01:55 のところで説明されている通り、下記のような初期化メソッドを作成しておく必要がある認識なのですが、理解正しいでしょうか。
def __init__(self): self.name = ""
(2)
1:03:00 の部分で、「self に インスタンスが代入される」との説明があるのですが、意味が分かりません。インスタンスが代入されるとはどういう意味でしょうか。
(3)
1:03:04 の部分で、「引数 self に a001 が代入され、 a001.name となるイメージ」との説明がありますが、引数を受け取る場合は init(self,a) などself + 引数の書き方をするのではないでしょうか。
a001のインスタンス化をしている部分でも、
a001 = Student()
としか書いていないので、そもそもa001 を引数として渡していないように見えます。
(4)
そもそもの話ですが、何故、クラス化が必要なのかが理解できません。
def で関数を作成して、利用したいときに毎回 作成した関数を呼び出して利用するじゃダメなのでしょうか。