首页 > 解决方案 > 对象没有属性问题python代码

问题描述

我正在做一个项目,用 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)

标签: pythonpython-3.xfunctionclass

解决方案


问题就在这里;

a=[Airline() for i in range(10)]
j=0
while j<len(a.fleet):

您可能不小心将顶行留在了那里,因为它会覆盖您传递给函数的内容

作为提示,您可以通过使用更具描述性的变量名称来帮助避免这些问题。因此a,您可以调用它airlinesairline_list


推荐阅读