class Airplane:
def __init__(self, plane_model, serial_num, num_seats, miles_travelled):
self.model = plane_model
self.serial = serial_num
self.seat = num_seats
self.miles = miles_travelled
class Flight:
def __init__(self, plane):
self.passangers = []
self.airplane = plane
我正在尝试完成以下功能:
^{pr2}$到目前为止,我的尝试是:
if self.seat > 0:
self.seat -= 1 #num_seats
return True
else:
return False
当然,如果添加乘客,实例变量num_seats
将减少1。可用的座位数在Airplane
类的第三个参数中指示。在
如果使用我设计的函数,尝试与docstring中的操作完全相同的操作将返回以下错误:
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
f.add('a')
File "/Users/N/Desktop/Untitled.py", line 39, in add
if self.seat > 0:
AttributeError: 'Flight' object has no attribute 'seat'
我想我可能遗漏了一些东西,但我不确定是什么。在
您的具体错误是
Flight
实例没有seat
属性,该属性是Airplane
实例的属性,因此应该通过self.airplane
属性(该属性提供指向将用于Flight
实例的Airplane
实例的链接):不过,我觉得你的造型总体上有点偏差。乘客的增加改变了
^{pr2}$Flight
实例上的免费座位数,但并没有改变Airplane
实例上的座位数(据我所知,他们不会像人们预订的那样从飞机上剥离座位!)另外,飞行距离是飞行的属性,而不是飞机。有鉴于此,我将实施如下:注意,
Flight.add
检查以确保当前的passengers
列表适合plane.seats
。不需要保留一个单独的属性-free_seats
可以从其他属性中计算出来,所以我将其设置为只读的property
。使用中:(别担心,格雷厄姆在这一点上是过去关心的。)
这并不完全符合您的规范,因为
Flight.add
现在如果航班已满,将引发一个错误,而不是返回False
。这是一种更具python风格的编码方式;请参见"Easier to ask for forgiveness than permission"。在相关问题 更多 >
编程相关推荐