通过修改现有对象创建新对象
Create a new object by modifying an existing object
我创建了以下 class:
class ball:
def __init__(self,d=0,weight=0):
self.d = d
self.weight = weight
然后我们有一个全局函数,returns一个修改重量的球,定义如下:
def modifyWeight(ball, weight):
ball.weight = weight
return ball
最后是主函数,它根据权重列表创建球列表:
def createBallList(ball, weights):
ballList = []
for weight in weights:
modifyWeight(ball,weight)
ballList.append(ball)
return ballList
好吧,这就是解释,如果 weights = [20,25,15]
我预计:
ball = ball(2)
ballList = creatBallList(ball,weights)
ballList[0].weight = 20
ballList[1].weight = 25
ballList[2].weight = 15
但结果是:
ballList[0].weight = 15
ballList[1].weight = 15
ballList[2].weight = 15
一直在尝试一些事情,但显然没有任何效果。谢谢!
您需要复制该对象,您只是重复将同一对象添加到列表中,因此当您设置权重时,您是为同一对象设置权重,使用 copy.deepcopy 实际创建一个新对象。
from copy import deepcopy
cp_b = deepcopy(ball) # new copy of the ball object
modifyWeight(cp_b,weight)
当您执行 ball.weight = weight
时,您不会创建新球。您更改现有球的重量。当您执行 ballList.append(ball)
时,您会一遍又一遍地将同一个球添加到列表中。该列表包含相同的球三次。
如果您想在每次循环中创建一个新球,请在每次循环中创建一个新球:
def createBallList(weights):
ballList = []
for weight in weights:
newBall = ball(weight=weight)
ballList.append(newBall)
return ballList
请注意,您不需要将 ball
传递给 createBallList
。如果它所做的只是创建新球,而不是使用原始球,那么它根本不需要原始球。
我不确定 d
在你的 ball
class 中的作用是什么,或者你为什么将它设置为 2,所以我省略了那部分这里。您可以 ball(d=2, weight=weight)
来创建新球,并将 d
设置为 2。
我创建了以下 class:
class ball:
def __init__(self,d=0,weight=0):
self.d = d
self.weight = weight
然后我们有一个全局函数,returns一个修改重量的球,定义如下:
def modifyWeight(ball, weight):
ball.weight = weight
return ball
最后是主函数,它根据权重列表创建球列表:
def createBallList(ball, weights):
ballList = []
for weight in weights:
modifyWeight(ball,weight)
ballList.append(ball)
return ballList
好吧,这就是解释,如果 weights = [20,25,15]
我预计:
ball = ball(2)
ballList = creatBallList(ball,weights)
ballList[0].weight = 20
ballList[1].weight = 25
ballList[2].weight = 15
但结果是:
ballList[0].weight = 15
ballList[1].weight = 15
ballList[2].weight = 15
一直在尝试一些事情,但显然没有任何效果。谢谢!
您需要复制该对象,您只是重复将同一对象添加到列表中,因此当您设置权重时,您是为同一对象设置权重,使用 copy.deepcopy 实际创建一个新对象。
from copy import deepcopy
cp_b = deepcopy(ball) # new copy of the ball object
modifyWeight(cp_b,weight)
当您执行 ball.weight = weight
时,您不会创建新球。您更改现有球的重量。当您执行 ballList.append(ball)
时,您会一遍又一遍地将同一个球添加到列表中。该列表包含相同的球三次。
如果您想在每次循环中创建一个新球,请在每次循环中创建一个新球:
def createBallList(weights):
ballList = []
for weight in weights:
newBall = ball(weight=weight)
ballList.append(newBall)
return ballList
请注意,您不需要将 ball
传递给 createBallList
。如果它所做的只是创建新球,而不是使用原始球,那么它根本不需要原始球。
我不确定 d
在你的 ball
class 中的作用是什么,或者你为什么将它设置为 2,所以我省略了那部分这里。您可以 ball(d=2, weight=weight)
来创建新球,并将 d
设置为 2。