![](/img/trans.png)
[英]Creating a new instance of a class and accessing its instance variables in 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.