【发布时间】:2020-04-27 15:20:48
【问题描述】:
我正在做一个项目,用 python 3 创建航空公司的数据库(简单)。
它包含三个不同的代码:飞机、航班和航空公司。所有三个代码一起工作,飞机和航班都正常工作。问题出在航空公司一号上。
代码使用测试代码执行。该测试代码包含来自飞机和航班的所有信息。该信息保存在两个不同的类中,稍后由 Airline 程序调用。
当我尝试从 CAirline 类调用 Airline.fleet(以及操作和调度)时,问题就出现了。
程序返回:
AttributeError: 'list' object has no attribute 'fleet'
航空公司代码是:
import Aircraft
import Flight
def Airline():
class CAirline:
def __init__(self):
self.name = ""
self.fleet = ""
self.operations = ""
self.schedule = ""
return CAirline
def add_aircraft(a, ac):
a=[Airline() for i in range(10)]
j=0
while j<len(a.fleet):
if a[j].fleet[0]==ac[0]:
return False
else:
a.fleet.append(ac)
return True
j+=1
测试代码为:
import Aircraft
import Flight
import Airline
def createXicaAirline ():
AC1 = Aircraft.Aircraft()
AC1.callsign = "EC234"
AC1.type = "A320"
AC1.seats = 280
AC2 = Aircraft.Aircraft()
AC2.callsign = "EC504"
AC2.type = "A321"
AC2.seats = 310
FL1 = Flight.Flight()
FL1.dep = "Barcelona"
FL1.arr = "Budapest"
FL1.time_dep = 8*60
FL1.time_arr = 11*60
FL1.passengers = 54
FL2 = Flight.Flight()
FL2.dep = "Barcelona"
FL2.arr = "Istambul"
FL2.time_dep = 9*60
FL2.time_arr = 12.5*60
FL2.passengers = 154
FL3 = Flight.Flight()
FL3.dep = "Istambul"
FL3.arr = "Budapest"
FL3.time_dep = 17*60
FL3.time_arr = 19.25*60
FL3.passengers = 140
FL4 = Flight.Flight()
FL4.dep = "Budapest"
FL4.arr = "Barcelona"
FL4.time_dep = 20*60
FL4.time_arr = 23*60
FL4.passengers = 97
Xica = Airline.Airline()
Xica.name = "Xica Airline"
Airline.add_aircraft(Xica, AC1)
Airline.add_aircraft(Xica, AC2)
Airline.add_operation(Xica, FL1)
Airline.add_operation(Xica, FL2)
Airline.add_operation(Xica, FL3)
Airline.add_operation(Xica, FL4)
return Xica
print ("Phase1 test program")
A = createXicaAirline()
Airline.show_airline(A)
print ("Phase1 test program end")
代码运行完美,直到:Airline.add_aircraft(Xica, AC1)
【问题讨论】:
-
为什么要在函数中定义类?
-
你的意思是用
return CAirline()结束Airline(),所以它返回一个实例而不是类本身? -
您在
add_aircraft中使用a=[...将列表分配给a。为什么您希望a成为Airline? -
如果您想编写测试,也可以查找测试框架(例如
unittest或pytest)。
标签: python python-3.x function class