Python关于类的一个坑点
打卡MIT6.100L(17/26)
一、背景
写一个Vehicle
类,一个Vehicle
有以下属性:
轮子的数量
乘客数量
颜色
最大载客数: 5
class Vehicle(object):
def __init__(self, w, o, c):
"""
交通工具有以下属性:
轮子的数量(int)、
乘客数量(int)、
颜色(str)
最大载客数: 5
"""
self.wheels = w
self.occupants = o
self.color = c
二、坑点
在上面的 Vehicle
类代码基础上进行扩展。
为 Vehicle
类创建另一个名为 add_n_occupants
的方法,该方法接受一个整数 n
作为参数。
当调用该方法时,使其在增加乘员时进行以下检查:
- 如果增加后的乘员数量超过
max_occupancy
,则不执行增加操作。 - 抛出
ValueError
异常,并提供适当的错误信息。
如果增加后的乘员数量不超过 max_occupancyself
,乘员数量增加 n
,并返回增加后的总乘员数。
如果这么写的话。。。。。。
def add_n_occupants(self, n):
self.occupants += n
if self.occupants > self.max_occupancy:
raise ValueError("too many man")
else:
return self.occupants
v2 = Vehicle(4, 3, "blue")
print(v2.add_n_occupants(3))
在执行代码后,虽然会报错,但是实际上,v2也依然修改成了6,因为他的值已经被修改了,只是在代码逻辑上抛出报错。
所以我们可以多声明一个变量,来存储这个过程。
def add_n_occupants(self, n):
new_occ = self.occ + n
if new_occ > self.max_occ:
raise ValueError("exceeded max occupancy")
else:
self.occ = new_occ
return self.occ
这样不仅按题目要求报错,occ也没有改变他的值。