Python不创建新的干净实例?
所以我在一个数组中创建了一个离开航班的列表,以便在以后的应用程序中迭代 我从一个很长的html中获取信息 xpathes退房了,其他一切都很好。我有一个主要的包装对象叫做FlightLegs。还有一个小的内部物体叫做飞行 结构简单。每个FlightLegs都有一个航班起飞的日期,三个航班在同一日期的不同时间起飞 就像你有一个日期:2012年3月28日和三个航班起飞时间:8:10,14:30,20:00 很简单 所以我有两个嵌套循环。首先,在飞行腿上打圈。设置日期。。。然后在那条腿上绕了一圈。并将它们添加到航班数组中。然后在列表中添加FlightLegs的广告。开始一个新的世界 代码如下:Python不创建新的干净实例?,python,Python,所以我在一个数组中创建了一个离开航班的列表,以便在以后的应用程序中迭代 我从一个很长的html中获取信息 xpathes退房了,其他一切都很好。我有一个主要的包装对象叫做FlightLegs。还有一个小的内部物体叫做飞行 结构简单。每个FlightLegs都有一个航班起飞的日期,三个航班在同一日期的不同时间起飞 就像你有一个日期:2012年3月28日和三个航班起飞时间:8:10,14:30,20:00 很简单 所以我有两个嵌套循环。首先,在飞行腿上打圈。设置日期。。。然后在那条腿上绕了一圈。并将
#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的评论,它可能毕竟是静态的。我认为默认情况下变量将是公共的和实例的
我将如何访问它们并不重要。重要的部分是计数器
例如,我会通过foreach访问它们 您需要在构造函数中初始化变量(尤其是可变变量),而不是全局类。(您可以在类定义中设置不可变类型,例如字符串或字符串元组,但在大多数情况下可能不应该这样做) 也就是说,而不是:
class FlightLeg:
Flight = []
…它只创建一个航班
列表,由航班腿
的所有实例共享
这样做:
class FlightLeg(object):
def __init__(self):
self.flight = []
…为每个FlightLeg
对象创建一个新的FlightLeg
列表
(使用大写成员名称不是一个bug,但在Python中恰好是不规则的,与之相反)。到底哪一行受到影响?输出是什么?实际上并没有显示FlightLeg.Flights是如何定义的。有没有可能它是一个类变量,而不是一个实例变量,因此每个FlightLeg实例只共享一个Flights数组?我猜第三行的所有代码都缩进了四个空格?你能修复缩进吗?你没有提供足够的信息,请修复缩进,删除你认为可以的每一行,并用注释替换它,更明确地说明你如何访问FlightList,你得到的结果和预期的结果。天哪,伙计们,坚持住,我回家后会修复它。在那之前不要关上它。嘘,谢谢你,伙计!非常感谢!哇,我不知道。