Python 2.6: проблема иерархии сдерживания: те же значения: S - PullRequest
0 голосов
/ 12 июля 2010

Привет всем, Если вы видели мой предыдущий пост, вы знаете, что я работаю над программой для авиакомпаний, использующей Python.

Другая проблема, которая возникла, заключалась в том, что после запуска одного полета он вычисляет продолжительность полета и заменяет кнопку, которая используется для запуска полета. Но когда я покупаю другой самолет, он изменяет оба статуса полета на одно и то же время (статус - продолжительность - время прибытия, оставшееся до оставления приземления).

На данный момент моя программа довольно большая, поэтому я постараюсь просеять все остальные ****, которые там есть:

Вот страница, где вы нажимаете «Запустить полет»

def Flights (GUI, Player):
...
    for AP in Player.Airplane_list:
        GUI.la(text = AP.aircraft)
        GUI.la(text = 'Flight Pax')
        if AP.status == 0:
            GUI.gr(2)
            GUI.bu(text = 'Launch Flight', command = Callable(Launch_refresh, count, GUI, Player))
            GUI.bu(text = 'Edit Flight', command = Callable(flight_edit, GUI, count, Player))

Launch_refresh в основном обновляет окно и переходит к запуску (ниже), который рассчитывает все время и деньги. и Self - класс Player, который будет ниже метода запуска, который находится внутри класса player.

def launch (self, Airplane_No): #Method used to calculate flight-time specific-data and set aircraft into flight
    if self.fuel >= (self.Airplane_list[Airplane_No].duration*self.Airplane_list[Airplane_No].fuel_consump):
        self.Airplane_list[Airplane_No].Flight.departure_time = datetime.now()#sets Departure Time to Now
        self.Airplane_list[Airplane_No].Flight.arrival_time = self.Airplane_list[Airplane_No].Flight.departure_time+timedelta(self.Airplane_list[Airplane_No].duration)#Sets arrival Time
        self.Airplane_list[Airplane_No].status = self.Airplane_list[Airplane_No].Flight.arrival_time-datetime.now()#Status to Arrival time minus now
        self.fuel -= (self.Airplane_list[Airplane_No].duration*self.Airplane_list[Airplane_No].fuel_consump)#Subtracts Fuel Used
        self.bank += self.Airplane_list[Airplane_No].Flight.income#Adds Flight Income to Bank

А вот и класс Игрока

class Player (object):#Player Class to define variables
    '''Player class to define variables'''

    def __init__ (self, stock = 0, bank = 1, fuel = 0, total_flights = 0, total_pax = 0, Airplane_list = Airplane([]), APValue_Total = 1):
        ...

Затем внутри Player.Airplane_list находится список классов самолетов, в которых есть класс полета:

Вот класс самолетов:

class Airplane (object):    
'''Airplane Class'''

    def __init__ (self, company = '', aircraft = '', base_price = 0, flight_range = 0, pax = 0,
                  fuel_consump = 1, speed = 10, crew_pilots = 0, crew_cabin = 0,
                  crew_mechanics = 0, crew_cleaning = 0, staff_trg = 0, Total_price = 0, status = 0, Flight = Flight(departure_time = datetime(1,1,1),
                  distance = 2000, arrival_time = datetime(1,1,1)),duration = 1, airplane_details = []):

и, как вы можете видеть, у него есть класс Flight, который использует только эти 3 аргумента (длительность должна использовать скорость самолета вместе с расстоянием полета)

Так что я предполагаю, что проблема заключается в методе запуска, но я не знаю точно, где он начинается ... Опять же, для меня это выглядит прекрасно: S

1 Ответ

1 голос
/ 12 июля 2010

Ваш код __init__ использует аргумент для объекта по умолчанию:

class Airplane (object):    
'''Airplane Class'''
    def __init__(self, ..., Flight = Flight(departure_time = datetime(1,1,1), ...):

Аргументы по умолчанию оцениваются только один раз, когда класс определен, поэтому каждый объект Airplane получит один и тот же Flight, если он не указан в аргументах конструктора. Я не могу понять все, о чем вы спрашиваете, но это может способствовать вашей проблеме.

...