2つのクラスに問題があります。これは、私はそれが役立つかどうここクラスメソッドは、他のクラスの変数を予期しない副作用として変更できますか?
print(player1.getPosSize())
ball.setPos(windowWidth, [player1.getPosSize(), player2.getPosSize()],
[player1.getSpeed(), player2.getSpeed()])
print(player1.getPosSize())
は、メソッド定義されている私のメインループの中で書いたものである
(ボールクラス)
def setPos(self, windowWidth, playerPosSizes, playerSpeed):
playerPosSizes[0].append(playerSpeed[0])
playerPosSizes[1].append(playerSpeed[1])
playerPosSizeSp = playerPosSizes
(プレイヤークラス)
def getPosSize(self):
return self.posSize
def getSpeed(self):
return self.ysp
これは出力です:
[80, 285.0, 40, 150]
[80, 285.0, 40, 150, 0.0]
したがって、getPosSize()
が返すリストが変更されます。 getPosSize
は、クラスプレーヤーにのみ存在するリストposSize
を返すので、これは奇妙です。そして私は他のクラスのメソッドでposSize
のVALUEを使用しています。私はどのように変更することができますposSize
リストが表示されません!私はgetPosSize
と呼ぶと、posSize
のコピーを手に入れますか?ですから、ボールクラスのsetPos
メソッドでそのコピーを使用すると、元のposSize
は変更されません。
コードが混乱していると私は本当にすみません。関連する部分だけを含めるようにしました。
に
ball.posSize = player1.posSize
を変更するには、コードのエヴリーラインの前にexrta 4スペースを追加する必要があります。 SOに貼り付ける前にエディタでそれを行う方が簡単です。 – furas'='を使うと、pythonはリストのコピーを作成しません。メモリ内の同じデータへの参照が2つあります。 'new_list = other_list [:]'または 'new_list = other_list.copy()'が必要です – furas
あなたのコードが何をしているかは完全には分かりません。あなたの問題に焦点を当てた[mcve]を投稿すると助けになります。しかし、 'getPosSize'を呼び出すことは、' self.posSize'(リストであると仮定します)のコピーを作成しない**、実際のリストオブジェクトへの参照を返します。リストのコピーが必要な場合は、例えば 'return self.posSize [:]' –