繁体   English   中英

Python没有创建新的干净实例?

[英]Python not creating a new clean instance?

因此,我将创建一个数组中的剩余飞行列表,以在以后的应用程序中进行迭代。

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

xpathes签出,其他所有都很好。 我有一个名为FlightLegs的主要包装对象。 还有一个较小的内部物体,叫做Flights。

结构简单。 每个FlightLegs都有一个DATE,该航班将在该DATE出发,而3个航班在该DATE的不同时间出发。

因此,就像您有一个日期:28/03/2012和三个航班,它们分别在:8:10、14:30、20:00出发。

很简单。

所以我有两个嵌套循环。 首先,遍历FlightLegs。 设置DATE ...然后在那条腿上的Flights上循环。 并将它们添加到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)

现在的问题是,内部飞行中的飞行分支Array实际上增加了3。直到最后一次飞行600。似乎在循环中没有创建新对象……那是什么原因呢?

编辑:

FlightLeg是:

class FlightLeg:
    Flight = []
    Date = ""

航班是:

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

顺便说一句。我当然是Python的新手。 我只是在学习。 但是现在阅读DSM的注释,可能毕竟是静态的。 我认为默认情况下变量将是public和instance。

我如何访问它们并不重要。 重要的是计数器。 ;-)

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

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

也就是说,代替:

class FlightLeg:
    Flight = []

...仅创建单个Flight列表,由FlightLeg的所有实例共享...

做这个:

class FlightLeg(object):
    def __init__(self):
        self.flight = []

...这将为每个FlightLeg对象创建一个新的flight清单。

(使用大写字母的成员名不是bug,但是在Python中碰巧是单反的,与PEP-8相反)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM