所以我在数组中创建了一个离港航类列表,以便在以后的应用程序中进行迭代。
我正在从很长的 html 中获取信息。
xpathes 检查出来,其他一切都很好。我有一个名为 FlightLegs 的主要包装对象。还有一个名为 Flights 的次要内部对象。
结构简单。每个 FlightLegs 都有一个航类起飞的日期,以及在同一日期的不同时间起飞的三个航类。
假设您有一个日期:2012 年 3 月 28 日和三个起飞时间为:8:10、14:30、20:00 的航类。
足够简单。
所以我有两个嵌套循环。首先,循环 FlightLegs。设置日期...然后循环遍历该航段中的航类。并将它们添加到 Flights 数组中。然后将 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 访问它们。
请您参考如下方法:
您需要在构造函数中初始化您的变量(尤其是可变变量),而不是全局类。 (您可以在类定义中设置不可变类型,例如字符串或字符串元组,但在大多数情况下可能不应该)。
也就是说,代替:
class FlightLeg:
Flight = []
...它只创建一个 Flight 列表,由 FlightLeg 的所有实例共享...
这样做:
class FlightLeg(object):
def __init__(self):
self.flight = []
...为每个 FlightLeg 对象创建一个新的 flight 列表。
(使用大写成员名称不是错误,但在 Python 中恰好是不惯用的,与 PEP-8 相反)。
