2012-03-30 3 views
0

나중에 배열에서 항공편을 떠날 목록을 만들어 나중에 적용 할 때 반복합니다.파이썬이 새로운 클린 인스턴스를 생성하지 않습니까?

길게 긴 html 정보를 얻고 있습니다.

xpathes 체크 아웃하고 다른 모든 것이 좋습니다. FlightLegs라고하는 주요 래핑 객체가 있습니다. 그리고 작은 내부 물체는 비행기라고 불렀습니다.

구조가 간단합니다. 모든 FlightLegs에는 항공편이 출발하는 DATE와 해당 날짜의 다른 TIMES에서 출발하는 항공편 3 개가 있습니다.

날짜가 다음과 같음 : 2012 년 8 월 28 일과 3 회의 비행 시간 : 8:10, 14:30, 20:00.

충분히 간단합니다.

그래서 두 개의 중첩 루프가 있습니다. 먼저 FlightLegs를 반복합니다. DATE ... 그 다리에있는 항공편을 반복합니다. 그들을 항공편 배열에 추가합니다. 그런 다음 FlightLegs를 목록에 광고하십시오. 그리고 새로운 것을 시작합니다. 여기

코드입니다 :

#Looping thourght the flight legs. 
for flightLeg in flightLegs: 

    #. is needed in the xpath so it matches items only in this flight leg. 
    fleg = FlightLeg() 
    fleg.Date = str(flightLeg.xpath(".//input[@name='departDate1']")[0].get('value')) 
    innerFlights = flightLeg.xpath(".//div[@class='flights_flight']") 
    counter = 0 
    #Getting the three flights in the flight leg leaving at 8 - 14 - 20. 
    for flight in innerFlights: 
     fl = Flight() 
     fl.FlightPrice = str(flight.xpath(".//span[@class='flights_price']")[0].text) 
     fl.FlightDepartureTime = str(flight.xpath(".//span[@class='flights_departuretime']")[0].text) 
     fl.FlightArrivalTime = str(flight.xpath(".//span[@class='flights_arrivaltime']")[0].text) 
     fl.FlightNumber = str(flight.xpath(".//span[@class='flights_flightnumber']")[0].text) 
     fl.FlightDepAirport = str(flight.xpath(".//span[@class='flights_departureairport']")[0].text) 

     fleg.Flights.append(fl) 
     print "Lengts of inner flights: " + str(len(fleg.Flights)) 
     counter += 1 
     print "Lengts of inner counter: " + str(counter) 

    flightList.append(fleg) 

이제이의 문제는 내부 비행 비행 다리의 배열이 실제로 마지막 비행 600까지 최대 3 이상하는 것이 증가하고있다 그것은 보인다 새로운 개체 없다 루프를 작성하는 동안 생성됩니다 ... 그래서 무엇이 이것을 일으킬 수 있습니까?

편집 :

FlightLeg은 다음과 같습니다

class FlightLeg: 
    Flight = [] 
    Date = "" 

비행은 다음과 같습니다

class Flight: 
    FlightPrice = "" 
    FlightDepartureTime = "" 
    . 
    . 
    . 

이 Btw은 .. 나는 물론 파이썬에 새로 온 사람. 나는 단지 배우는 중이다. 그러나 이제는 DSM의 주석을 읽었을 때, 그것은 결국 정적 일 수 있습니다. 저는 변수가 공개되고 인스턴스가 기본적으로 존재한다고 생각했습니다.

어떻게 액세스 할 것인가는 중요하지 않습니다. 중요한 부분은 카운터입니다. ;-)

예를 들어 foreach를 통해 액세스 할 수 있습니다.

+1

정확히 어떤 라인이 영향을 받습니까? 출력은 무엇입니까? – Marcin

+1

FlightLeg.Flights가 정의 된 방법을 실제로 나타내지는 않습니다. 인스턴스 변수가 아닌 클래스 변수 일 가능성이 있으므로 모든 FlightLeg 인스턴스는 하나의 Flights 배열 만 공유합니까? – DSM

+0

제 3 행의 모든 ​​코드가 4 칸 들여 쓰여졌습니다. 들여 쓰기를 고칠 수 있어요? – kossmoboleat

답변

6

클래스 전역 변수 대신 생성자 변수 (특히 가변 값 변수)를 초기화해야합니다. 클래스 정의 안에 문자열이나 튜플과 같은 불변의 타입을 설정하는 것은 불가능하지만, 대부분의 경우 그렇게해서는 안된다.

class FlightLeg(object): 
    def __init__(self): 
     self.flight = [] 
: FlightLeg의 모든 인스턴스가 공유하는 단 하나의 Flight 목록을 생성

class FlightLeg: 
    Flight = [] 

...

이를 수행하는 대신,이다

... 모든 FlightLeg 개체에 대해 새 flight 목록을 만듭니다.

(대문자 사용은 버그가 아니지만 Python에서는 일률적이며 PEP-8과는 반대로).

+0

감사합니다. 매우 감사! – Hannibal

관련 문제