質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

493閲覧

新しくメソッドを定義し足算の結果を出力させたい。

GuMasi

総合スコア73

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/01/15 07:33

編集2020/01/15 07:34

self.number に引数を足す add メソッドを定義し足算の結果を出力させたく下記のコードを実行しましたところ答えが31に出力されないと正解ではないところ14、7が出力され、上手くいかず...

下記は例題として出されたコード

python3

1class MyClass: 2  def __init__(self, num): 3 self.number = num 4    5     6 7c = MyClass(24) 8c.add(7) 9print(c.number) 10 11 12

試したこと:

私が記述しましたコード(下記)

python3

1 2class MyClass: 3  def __init__(self, num): 4 self.number = num 5    def add(self,number): 6 self.number = number 7 print(self.number + c.number) 8     9 10c = MyClass(24) 11c.add(7) 12print(c.number) 13 14

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

  1. 関数内/メソッド内からグローバル変数の値を覗きに行くことはあまりしません。(ただし文法上は問題無いですし、そのように実装するのが適当な場合もあります)
  2. インスタンス変数を別の値で上書きすると、当然元々の値は消えます。

self.number と number を足した値を新たな self.number にしたいのなら、素直に書けば良いです。

Python

1def add(self, number): 2 self.number = self.number + number # self.number += number でも可

投稿2020/01/15 07:40

編集2020/01/15 07:41
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GuMasi

2020/01/15 10:22

回答していただきましてありがとうございます。 > 関数内/メソッド内からグローバル変数の値を覗きに行くことはあまりしません。 >>そうなのですね。 > self.number と number を足した値を新たな self.number にしたいのなら、素直に書けば良いです。 >>ありがとうございます、正しく出力されました。 度々お訊きしまして恐縮なのですが仮に一列目に下記のコードが追加されてたとしましてself.number と引数の和を返す(self.number を変えない)sum メソッドを定義し出力結果を43と17を出力もさせたいと思いまして下記のコードを記述し実行しましたところNoneが出力され上手くいかず... もしお願いできましたら助かります。 31 17 None 43    (その他の記述は質問欄と同様です)   def sum(self,number):    self.number +=number num = c.sum(26) print(num) # 43 print(c.number) # 17
GuMasi

2020/01/15 10:25

すみません、追記です。 def~ self.number +=numberまでは私が記述しましたコードになります。
LouiS0616

2020/01/15 10:29

+=による累算代入は行わず、和をreturnすれば良いです。
GuMasi

2020/01/15 10:43

>+=による累算代入は行わず、和をreturnすれば良いです。 >>ありがとうございます、こちらで合ってますでしょうか? def sum(self,number): return self.number+number 出力結果: 31 17 43 17
LouiS0616

2020/01/15 10:58

実際動作させて想定通りの出力になるのなら、合っていると判断して良いでしょう。 不安なようであれば別の例を適当に考えて試せば良いです。
GuMasi

2020/01/16 10:15

>実際動作させて想定通りの出力になるのなら、合っていると判断して良いでしょう。 >>ありがとうございます。
guest

0

add() を呼び出したときに引数を self.number に足すのではなく、代入しているため、加算されていません。
以下のように修正してはどうでしょうか。

diff

1- self.number = number 2+ self.number += number

python

1class MyClass: 2 def __init__(self, num): 3 self.number = num 4 5 def add(self, number): 6 self.number += number 7 8 9c = MyClass(24) 10c.add(7) 11print(c.number)

投稿2020/01/15 07:40

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GuMasi

2020/01/15 10:49

回答してくださりましてありがとうございます。 おかげさまで正しく出力させることができました。 > 代入しているため、加算されていません。 あの〜代入するとどうして加算されないのでしょうか? ご教示いただけますと助かります。
tiitoi

2020/01/15 10:54

代入は右の値を左の変数に上書きで設定する事だからです。 a = 1 # a に1を設定する。 a = 2 # a に2を設定する。 としたら、2行目の時点で a は3ではなく、2になります。
GuMasi

2020/01/16 10:21

とてもわかりやすく教えてくださりましてありがとうございます。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問