【问题标题】:object has no attribute problem with python code对象没有属性问题python代码
【发布时间】: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
  • 如果您想编写测试,也可以查找测试框架(例如unittestpytest)。

标签: python python-3.x function class


【解决方案1】:

问题就在这里;

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

你可能不小心把上面那一行留在了那里,因为它会覆盖你传递给函数的内容

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

【讨论】:

  • Airline() 返回类,而不是实例。他不是也需要调用airline()来获取实例吗?
  • @Barmar 哎呀,你是对的,完全错过了。这段代码很奇怪,不知道为什么OP这样做
猜你喜欢
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2015-11-09
  • 2021-07-12
  • 1970-01-01
相关资源
最近更新 更多