|
上段代码中这句:
c = Car_General(carid, brand, model, platenum, dayrent, bonus=0, insurance=0, loss=0, adiscount=1)
是有问题的。**原因**与问题如下:
### 1. **缺乏正确传递参数**
这行代码使用了 `Car_General` 类的构造函数,但传入的参数未能匹配实际情况。例如:
- 你在不同的条件下(如录入经济型车、豪华车等)为 `bonus`, `insurance`, `loss` 等传递了固定值 `0`,没有实际使用用户输入的具体值。
- 此外,你为每种车类型提供了专门的子类(如 `EconomyCar`, `LuxuryCar` 等),但却在此使用了 `Car_General` 类,而不是相应的子类。这不符合面向对象设计的原则。
### 2. **忽视不同子类的初始化逻辑**
你的 `EconomyCar`, `LuxuryCar`, `SportsCar` 和 `SUV` 类都重新定义了它们的 `__init__` 方法,但它们的实现不完整。例如,`EconomyCar` 的 `__init__` 方法只初始化了 `bonus` 属性,没有初始化其他通用属性(如 `brand`, `model`, 等)。导致实例化这些子类时,程序会报错。
---
### 修改建议
以下是对 `c = Car_General(...)` 这一句的修正,以及相关子类的问题的全面调整:
#### 修改问题中的语句
在 `register` 方法中,根据选择的车辆类型,应该实例化具体的子类,并正确传入所需的参数。
if sort_ == 1: # 经济型车
bonus = int(input('补贴:'))
carid = self.carid1
self.carid1 += 1
c = EconomyCar(carid, brand, model, platenum, dayrent, bonus=bonus)
elif sort_ == 2: # 豪华车
insurance = int(input('保险:'))
carid = self.carid2
self.carid2 += 1
c = LuxuryCar(carid, brand, model, platenum, dayrent, insurance=insurance)
elif sort_ == 3: # 跑车
loss = int(input('损耗:'))
carid = self.carid3
self.carid3 += 1
c = SportsCar(carid, brand, model, platenum, dayrent, loss=loss)
elif sort_ == 4: # SUV
carid = self.carid4
self.carid4 += 1
c = SUV(carid, brand, model, platenum, dayrent, adiscount=1)
---
#### 修复子类的 `__init__`
确保每个子类在初始化时能够正确继承父类的属性,同时增加其特有的属性。这里可以通过调用父类的 `__init__` 方法来简化逻辑,例如:
class EconomyCar(Car_General):
def __init__(self, carid, brand, model, platenum, dayrent, bonus=0):
super().__init__(carid, brand, model, platenum, dayrent, bonus=bonus)
class LuxuryCar(Car_General):
def __init__(self, carid, brand, model, platenum, dayrent, insurance=0):
super().__init__(carid, brand, model, platenum, dayrent, insurance=insurance)
class SportsCar(Car_General):
def __init__(self, carid, brand, model, platenum, dayrent, loss=0):
super().__init__(carid, brand, model, platenum, dayrent, loss=loss)
class SUV(Car_General):
def __init__(self, carid, brand, model, platenum, dayrent, adiscount=1):
super().__init__(carid, brand, model, platenum, dayrent, adiscount=adiscount)
---
### 最终正确的 `register` 方法
结合上述修正,完整的 `register` 方法如下:
def register(self):
sort_ = int(input('1.经济型车;2.豪华车;3.跑车;4.SUV:'))
num = int(input('请输入需要录入的数量:'))
for i in range(num):
print(f'请录入第{i+1}辆车\n')
brand = input('品牌:')
model = input('型号:')
platenum = input('车牌:')
dayrent = int(input('租金:'))
if sort_ == 1: # 经济型车
bonus = int(input('补贴:'))
carid = self.carid1
self.carid1 += 1
c = EconomyCar(carid, brand, model, platenum, dayrent, bonus=bonus)
elif sort_ == 2: # 豪华车
insurance = int(input('保险:'))
carid = self.carid2
self.carid2 += 1
c = LuxuryCar(carid, brand, model, platenum, dayrent, insurance=insurance)
elif sort_ == 3: # 跑车
loss = int(input('损耗:'))
carid = self.carid3
self.carid3 += 1
c = SportsCar(carid, brand, model, platenum, dayrent, loss=loss)
elif sort_ == 4: # SUV
carid = self.carid4
self.carid4 += 1
c = SUV(carid, brand, model, platenum, dayrent, adiscount=1)
# 记录到库存
self.cars[carid] = c
self.stocks.append(c)
---
### 总结
你的 `c = Car_General(...)` 是可以正常运行的,但并没有根据车辆类型动态地创建适当的子类实例。这违背了面向对象编程的基本思想。按照上述修改,通过实例化特定子类,并调用父类的构造函数,你可以优雅地实现程序逻辑。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|