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

Han*_*bal 1 python

所以我在一个数组中创建一个离开航班列表,以便在以后的应用程序中进行迭代.

我从一个很长的HTML中获取信息.

xpathes检查,其他一切都很好.我有一个名为FlightLegs的主要包装对象.还有一个名为Flights的小内在物体.

结构很简单.每个FlightLegs都有一个DATE,航班正在离开,三个航班在单个DATE的不同时间点离开.

所以就像你有一个日期:2012年3月28日和三个航班:8:10,14:30,20:00.

很简单.

所以我有两个嵌套循环.首先,在FlightLegs上循环.设置DATE ...然后循环遍历该Leg中的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)
Run Code Online (Sandbox Code Playgroud)

现在问题在于内部飞行中的飞行腿阵列实际上增加了超过3.直到最后一次飞行600.似乎在循环中没有创建新物体......那么是什么原因造成的?

编辑:

FlightLeg是:

class FlightLeg:
    Flight = []
    Date = ""
Run Code Online (Sandbox Code Playgroud)

飞行是:

class Flight:
    FlightPrice = ""
    FlightDepartureTime = ""
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

顺便说一下......我当然是Python的新手.我只是在学习.但是现在看了DSM的评论,可能是它毕竟是静态的.我认为默认情况下变量将是公共的和实例.

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

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

Cha*_*ffy 8

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

也就是说,而不是:

class FlightLeg:
    Flight = []
Run Code Online (Sandbox Code Playgroud)

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

做这个:

class FlightLeg(object):
    def __init__(self):
        self.flight = []
Run Code Online (Sandbox Code Playgroud)

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

(使用大写成员名称不是错误,但在Python中恰好是单一的,与PEP-8相反).