Skip to main content
 首页 » 编程设计

Python 没有创建一个新的干净实例

2025年05月04日15softidea

所以我在数组中创建了一个离港航类列表,以便在以后的应用程序中进行迭代。

我正在从很长的 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 相反)。