2011-12-14 2 views
1

나는 객체가정의하고 사용자의 목록을 액세스하는 개체를

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() 방법에 채워진 것 같다 경우)
+0

나는 모든 가격이 같을 것이라고 기대하지만 모든 가격이 0이 아니라 다소 임의의 가치라고 기대하고 있습니다. –

+0

'price = float (0)'보다는'price = 0.0'을 선호합니다. – juliomalegria

+0

@ Marnach, 사실 저는 random()을 넣었지만 잘못된 생각이었습니다. function_giving_a_price()는 지난 10 대의 자동차에 대해 0.0을 반환합니다. 나는 원래의 질문을 수정했다. – user1097922

답변

3

가장 가능성있는 설명은 당신이 실제로 showPriceList()를 호출하기 전에 createPriceList()를 호출하지 않는다는 것입니다. :

는 또한, createPriceList() 당신이 목록의 모든 요소에 같은 Car 객체에 대한 참조를 할당함으로써 오류가 있습니다 [편집 이제 질문의 코드를 편집 한 것으로, 우리는 이러한 가능성을 제거 할 수 있습니다]. 또한이 오류는 마지막 동작 인 random() function_giving_a_value() 호출이 0을 반환하는 경우에만 동작을 설명 할 수 있습니다.

마지막으로, 당신은 장소의 몇 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() 
+2

'createPriceList()'의 코드를 보았는가? 목록의 모든 항목을 동일한 개체로 설정합니다. –

+0

@SvenMarnach : 예, 질문을 입력 할 때 답안에 타이핑했습니다 .- – NPE

+0

아, 알겠습니다. 'random.random()'이 정확히 0을 반환한다는 것은 매우 놀랍다. :) –

0

첫째, 당신이 '잘못'방식으로 for 루프를 사용하고 있습니다. 목록의 길이에서 색인을 작성한 다음이 색인을 사용하여 같은 목록에서 요소에 액세스하고 있습니다. 당신이 당신의 예에 무슨 짓을

def createPriceList(self): 
    for car in self.carList 
     car.price = random() 
     print car.price 

, 루프 전에 한 차를 만드는 것입니다, 그것은 당신이 차를 저장할 때마다 값의 변화 : 이것은, 예를 들어 당신의 createPriceList 방법을, 그것은 다음과 같이 할 수 단순화 할 수있다 . 즉, 귀하의 차량 목록은 동일한 차량에 대한 참조로 가득 차게되므로 모두 동일한 가격을 갖게됩니다.) (랜덤은이 숫자가 0.1보다 작은 경우에는 0과 1 사이의 부동 소수점 숫자가 반환하기 때문에

영점은 인쇄 된 버전은 당신이 acheive하려고하는 내용에 따라 0.0

+0

윙윙 거리다 나는 잘 모르기 때문에 : print i, self.carList [i] .price는 내가 원하는 것을 정말로 돌려 준다. 각 라인은 다른 가격을 보여준다. – user1097922

+0

thats 가격 지정 후 바로 인쇄했기 때문입니다. self.carList [i-1] .price를 prinr한다면, self.carList [i]와 같은 값을 출력하는 것을 볼 수 있습니다. – bigblind

+0

@ Creemers : 당신은 self.carList [i-1] .price는 self.carList [i] .price와 동일하게 인쇄됩니다. – user1097922

0

처럼 보이는 것) 하나의 자동차에 대한 하나의 속성 (유지들, 그리고 클래스의 외부) (인스턴스를 자동차의 목록을 작성하는 것이 좋습니다 수 있습니다 : 그것은 중복 때문에

import random 

class Car: 
    def __init__(self): 
     self.price = random.random() 

class Day: 
    def __init__(self): 
     self.cars = [Car() for each in range(100)] 

day = Day() 
priceList = [car.price for car in day.cars] 

는 가격표가에서, 클래스 내에 존재해서는 안 내 의견.

관련 문제