Python2.6:包含层次结构问题:相同的值:S

Python2.6:包含层次结构问题:相同的值:S,python,function,class,methods,python-2.6,Python,Function,Class,Methods,Python 2.6,大家好,如果你们看过我之前的帖子,你们就会知道我正在使用Python编写一个航空公司程序 弹出的另一个问题是,在我启动一个航班后,它会计算航班的持续时间,并替换用于启动航班的按钮。但当我购买另一架飞机时,它会将两种飞行状态更改为相同的时间(状态为持续时间-到达时间-在飞机再次着陆前剩余的时间) 我的程序在这一点上相当大,所以我会尝试筛选所有其他****的程序: 这是您单击“启动航班”的页面 def Flights (GUI, Player): ... for AP in Player.A

大家好,如果你们看过我之前的帖子,你们就会知道我正在使用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基本上刷新窗口,然后进入Launch(下图),计算所有时间和现金。自我是玩家类,它将位于玩家类内部的启动方法之下

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):
        ...
然后inside Player.Planet_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

您的
\uuuu init\uuuu
代码将一个参数默认为一个对象:

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

在定义类时,默认参数只计算一次,因此每个飞机对象将获得相同的飞行,除非在构造函数参数中指定。我无法完全理解您的问题,但这可能会导致您的问题。

代码格式看起来很糟糕……不仅仅是格式。这是一些丑陋的初始化代码清单。哈哈,我知道,航空业有很多数据要处理。它们是迄今为止最大的初始化代码。