2012-03-30 45 views
0

因此,我创建了一个数组中的离开航班列表,以便在稍后的应用程序中进行迭代。Python没有创建一个新的干净实例?

我从长长的html中获取信息。

xpathes检出和其他一切都很好。我有一个名为FlightLegs的主要包装对象。还有一个名为Flights的小内部对象。

结构简单。每个FlightLegs都有一个DATE,在这个DATE上,这些航班将在该日期的不同时间离开,而三个航班将以不同的时间离开。

所以就像你有一个日期:2012年3月28日和三个航班离开:8点10分,14点30分,20点。

够简单。

所以我有两个嵌套循环。首先,通过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) 

现在有了这个问题,在内部飞行航段阵列实际上是在3增加,直到最后飞行600似乎没有新对象在循环中创建...所以会导致这种情况?

编辑:

FlightLeg是:

class FlightLeg: 
    Flight = [] 
    Date = "" 

航班是:

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

顺便说一句..我是新来的,当然了Python。我只是在学习。但是现在看到DSM-s的评论,它可能是静态的。我认为变量将默认为public和instance。

我如何访问它们并不重要。重要的部分是柜台。 ;-)

我会通过foreach访问它们,例如。

+1

究竟哪一行受到影响?什么是输出? – Marcin 2012-03-30 16:22:35

+1

您实际上并未展示FlightLeg.Flights的定义方式。它可能是一个类变量,而不是一个实例变量,所以每个FlightLeg实例只共享一个Flights数组? – DSM 2012-03-30 16:22:53

+0

我猜从第三行开始的所有代码都缩进了四个空格?你能修好缩进吗? – kossmoboleat 2012-03-30 16:27:12

回答

6

您需要在构造函数中初始化变量(特别是可变元素),而不是类全局变量。 (您可以在类定义中设置不可变类型,例如字符串或字符串元组,但在大多数情况下可能不应该)。

也就是说,代替:

class FlightLeg: 
    Flight = [] 

...它创建只有一个Flight名单,由FlightLeg所有实例共享...

这样做:

...为每个FlightLeg对象创建一个新的flight列表。

(使用大写的成员名称不是一个错误,但在Python中碰巧是单向的,与PEP-8相反)。

+0

谢谢队友!非常感激! – Hannibal 2012-03-30 18:05:36

相关问题