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

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

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

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

Q&A

1回答

308閲覧

PythonのClass内関数にて、呼び出していない処理がなされる

yshi

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2021/12/16 17:48

はじめての質問になるので、至らない点がありましたら申し訳ございません。
問題とは関係ないので、インポート文は省略しています。

Python

1//クラス定義 2Class User: 3 def __init__(self,t,w,color): 4 self.t=t 5 self.w=w 6 self.color=color 7 8 def next(self): 9 self.t+=5 10 self.w+=2 11//インスタンスの配列 12list1=[User(random(),random(),'y') for i in range(5)] 13//一部のcolorを変更 14list1[0].color='g' 15list1[3].color='g' 16 17for i in range(5): 18//colorがyのものだけにnext()を実施※問題点 19 if(list1[i].color=='y'): 20 list1[i].next() 21

問題点は、colorが'g'のインスタンスもtとwの値が更新されてしまう点です。
当たり前ですが、問題点のif文中でlist1[i].colorをprintすると、'y'だけプリントされます。

ちなみに、色を'g'に変更するかどうから実際にはランダムで決定していますが、質問の意図と関係ないため省略しています。

Classの仕様をまだ理解しきれていないので、クラス内の関数が呼び出される条件に不備があるかもしれません。
環境はAnacondaの最新版で、jupyter labを用いています。

本当に困っているので、回答よろしくお願いいたします。

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

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

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

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

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

quickquip

2021/12/16 23:54

コメントを # にとしくれないとそのまま実行できなくて不便です…… 単純に「実行しているファイルを貼ってない」と疑ってしまいます。 あるいは「実際に実行しているファイルが違うもの」の可能性を疑った方がいいのでは。
guest

回答1

0

コードだけ見ると「問題点は、colorが'g'のインスタンスもtとwの値が更新されてしまう」はあり得ないように見えます。他のコードがあるなら別です。

randomの影響を受けないように変更して実行してみた結果です。

python

1>>> class User: 2... def __init__(self,t,w,color): 3... self.t=t 4... self.w=w 5... self.color=color 6... def next(self): 7... self.t+=5 8... self.w+=2 9... 10>>> list1=[User(0,0,'y') for i in range(5)] 11>>> list1[0].color='g' 12>>> list1[3].color='g' 13>>> 14>>> for i in range(5): 15... if(list1[i].color=='y'): 16... list1[i].next() 17... 18>>> for i in range(5): 19... print(i, list1[i].t, list1[i].w) 20... 210 0 0 221 5 2 232 5 2 243 0 0 254 5 2

投稿2021/12/16 23:13

ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問