我有一个对象
class Car:
def __init__(self):
price = float(0)
然后另一个
class Day:
def __init__(self):
self.carList = [Car() for each in range(100)]
self.createPriceList()
def createPriceList(self):
tempCar = Car()
for i in range(100):
tempCar.price = function_giving_a_value() # 10 last cars have 0.0 as value
self.carList[i] = tempCar
print i, self.carList[i].price
# prints the correct list : each line contains a correct price
#edited after answers : in fact it's just misleading, cf answers
def showPriceList(self):
for i in range(len(self.carList)):
print i, self.carList[i].price
# prints i (correct) but each self.carList[i].price as 0.0
# so len(self.carList) gives correct value,
# but self.carList[i].price a wrong result
我的问题是:
为什么在
showPriceList()
中可以正确识别self.carList
(len
在循环中给出正确的数字)而self.carList[i].price
仅给出零? (当在方法createPriceList()
中似乎正确填充时) 最佳答案
最可能的解释是您实际上没有在调用createPriceList()
之前先调用showPriceList()
。 [编辑:既然您已经编辑了问题中的代码,我们就可以消除这种可能性]
另外,createPriceList()
会出现错误,您将对同一Car
对象的引用分配给列表的所有元素。当且仅当最后一个random()
function_giving_a_value()
调用返回零时,此错误才能解释此行为。
最后,您在几个地方都缺少了self.
[编辑:再次,您似乎在最近的编辑中已经修复了其中的一些]。
这是我的写法:
import random
class Car:
def __init__(self, price):
self.price = price
class Day:
def __init__(self, n):
self.carList = []
for i in range(n): # could also use list comprehension here
self.carList.append(Car(random.random()))
def printPriceList(self):
for i, car in enumerate(self.carList):
print(i, car.price)
day = Day(20)
day.printPriceList()