2012-03-30 19 views
0

今後のアプリケーションで繰り返し処理する配列のフライトを離れるリストを作成しています。Pythonは新しいクリーンなインスタンスを作成しませんか?

私は長い長いhtmlから情報を得ています。

xpathesがチェックアウトし、他のすべては問題ありません。私はFlightLegsと呼ばれる主要なラッピングオブジェクトを持っています。そしてマイナーな内側の物体はフライトと呼ばれました。

構造がシンプルです。すべてのFlightLegsには、フライトが終了するDATEと、その1つのDATEの異なるTIMESに出発する3つのフライトがあります。 8時10分、午前14時30分、午前20時00分:上のままに28/03/2012および3便:だからあなたのような

は、日付を持っています。

十分に単純です。

私は2つのネストループを持っています。まず、FlightLegsをループします。 DATEを設定し、その脚のフライトをループします。それらをフライトの配列に追加します。その後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) 

さて、これで問題は内部飛行中の飛行脚アレイは、実際に最終便600までは3の上に増加していることであるそれは新しいオブジェクトと思われますループを覚悟で作られています...これが原因なのでしょうか?

EDIT:

FlightLegは次のとおりです。

class FlightLeg: 
    Flight = [] 
    Date = "" 

フライトは次のとおりです。

ところで
class Flight: 
    FlightPrice = "" 
    FlightDepartureTime = "" 
    . 
    . 
    . 

..私はもちろんのPythonに新たなんです。私はちょうど学んでいます。しかし、DSMのコメントを読むと、結局のところ静的である可能性があります。私は変数がデフォルトで公開されインスタンスになると考えました。

私はそれらにアクセスする方法は重要ではありません。重要な部分はカウンターです。 ;-)

私はそれらをforeachなどでアクセスします。

+1

影響を受けるのは、どのラインですか?出力は何ですか? – Marcin

+1

FlightLeg.Flightsの定義方法は実際には表示されません。それはインスタンス変数ではなくクラス変数である可能性があります。したがって、すべてのFlightLegインスタンスは1つのFlights配列を共有しますか? – DSM

+0

3行目のすべてのコードが4つのスペースでインデントされていると思いますか?あなたはインデントを修正できますか? – kossmoboleat

答えて

6

あなたではなく、クラスのグローバルよりも、コンストラクタ内であなたの変数(特に変更可能なもの)を初期化する必要があります。 (クラス定義の中で文字列や文字列のタプルなどの不変型を設定することはできますが、ほとんどの場合はそうしないでください)。

FlightLegのすべてのインスタンスで共有つだけ Flightリストを作成

class FlightLeg: 
    Flight = [] 

... ...

がこれを実行します。代わりに、ある

... FlightLegオブジェクトごとに新しいflightリストを作成します。

(大文字のメンバー名はバグではありませんが、Pythonでは一意であり、逆にPEP-8とは逆です)。

+0

ありがとうございました!とても有難い! – Hannibal

関連する問題