
・Student クラス初期化メソッドについて
下記ソースのクラスについて質問です。
質問1
このクラス Student を書き始めた時に、「今回は、変数として、name(生徒名)、と data(平均点を算出する元データ)、の二つが必要だから、どちらも 初期化メソッドとして記載して、初期化しておこう。と思ったのですが、解説を見ると data の方は初期化しておらず。
クラス内で使われる アトリビュート(変数)はインスタンス事に必要と聞いていたので、その不便さを解消するためにコンストラクタを利用する理解だったので、 何故 data の方は 初期化しないか理解できません。何故ここでは name のみを初期化しているのでしょうか。
質問2
みなさんは自分でクラスを作成する際、どういった判断基準で、初期化する/しないを分けているのでしょうか。(いつもこのクラスの外に記載する/しないで間違えてしまい、途中でソースがかけなくなります。)
class Student: def __init__(self, name): self.name = name def calculate_avg(self, data): sum = 0 # data の 中身である[70,65,50,90,30]を num で左から格納する for num in data: sum += num avg =sum/len(data) return avg def judge(self, avg): if(avg >= 60): result = "passed" else: result = "failed" return result a001 = Student("sato") data = [70,65,50,90,30] avg = a001.calculate_avg(data) judge_result = a001.judge(avg) print(avg) print(a001.name) print(judge_result)
以上、よろしくお願いします。

>何故 data の方は 初期化しないか理解できません。
初期化以前に、dataは、インスタンス変数にもなっていません。
インスタンス変数にしていないこと、初期化しないこと、どちらを疑問に思っていますか?
動画のリンクは削除し、該当するコードを記載してください。
インスタンス変数というのは、
a001 = Student("sato")
の部分の "sato" のことでしょうか。
そうであれば、どちらも疑問です。
(例えば、a001 = Student("sato", data) のように、name 以外をインスタンス変数として設定しないのかがわかりません。
何故ここでは name のみが インスタンス変数として設定する方が好ましい?のでしょうか。
動画(見てません)では練習(勉強)のためにクラスの色々な使い方を提示されてるのではないでしょうか?実際には用途によってインスタンス作成時に代入するか、後で代入するか選ぶかと思います。
meg さん
ありがとうございます。
そうなのですが、実際に今回練習でこの例題を解く際に、私は初めに 
a001 = Student("sato", data)
と記載するのかな、と思ってつまずいたので、おそらく data はインスタンス変数として設定しないのが自然なのかな、と感じたのですが、理由?というか "sato" のみの方が都合が良い理由が理解できませんでした。
動画を見ました。
> そうなのですが、実際に今回練習でこの例題を解く際に、私は初めに
> a001 = Student("sato", data)
> と記載するのかな、と思ってつまずいたので
実践例は例題をベースにしているので、逆に何故例題と違う方法を取ろうとしたのか?の方が疑問に思います。練習なので素直に解けば良いと思います。
先生のやり方が良くないと思うのであれば独自の方法で実装されても良いと思います。
※どうしても疑問に思うのであればご本人に質問されるのがベストだと思います。

回答2件
あなたの回答
tips
プレビュー



