python - Python 新手,对超过 2 个实例使用 __add__ 方法?
问题描述
class Car:
def __init__(self, brand, color, model, year, mileage):
self.brand = brand
self.color = color
self.year = year
self.model = model
self.mileage = mileage
def __str__(self):
return f'TYPE: NORMAL CAR\nBrand: {self.brand}\nColor: {self.color}\n'
def __add__(self, other):
line = '- ' * 15
return '\n'.join([str(self), self.documentation(), line, str(other), other.documentation(), line])
def documentation(self):
return f'DOCUMENTATION\nModel: {self.model}\nYear: {self.year}\nMileage: {self.mileage} Km'
class SportCar(Car):
def __init__(self, brand, color, model, year, mileage, engine, maxspeed):
super().__init__(brand, color, model, year, mileage)
self.engine = engine
self.maxspeed = maxspeed
def __str__(self):
return f'TYPE: SPORT CAR\nBrand: {self.brand}\nColor: {self.color}\n'
def documentation(self):
return f'DOCUMENTATION\nModel: {self.model}\nYear: {self.year}\nMileage: {self.mileage} Km\n' \
f'Engine: {self.engine}\nMax Speed: {self.maxspeed}'
car1 = SportCar('Audi', 'Black', 'R8', '2018', '35 000', 'V6', '350 Km/h')
car2 = Car('Skoda', 'White', 'Superb', '2015', '165 000')
car3 = Car('Honda', 'Blue', 'Civic', '2017', '220 000')
car4 = SportCar('BMW', 'Red', 'M5', '2020', '10 000', 'V8', '430 Km/h')
print(car1 + car2 + car3 + car4)
我试图总结所有 4 个实例以显示它们的详细信息,但它不起作用我知道如果我 print(car1 + car2) 并且在它下面 print(car3 + car4) 会产生我想要的东西,但我只是好奇如何使代码能够像上面那样运行它,所有 4 个总结起来,最终我不断添加的所有内容都可以正常工作 还有 print(str(car1 + car2) + '\n' + str(car3 + car4))也是,但仍然......再次,我对 python 很陌生,它也是我的第一语言,谢谢:v
解决方案
您的__add__
函数正在返回一个str
. 将此行print(car1 + car2 + car3 + car4)
视为:
temp = car1 + car2 # car + car = str
temp1 = temp + car3 # str + car = error
通常,当您将 4 个对象添加在一起时,您是在隐式执行
(((a+b)+c)+d)
而不是对a+b+c+d
.
为了解决这个问题,你需要让你的__add__
函数返回一个Car
对象。有多种方法可以让你的函数做到这一点,所以我将把它留给你。
或者,您也可以跳过使用该__add__
函数并创建一个单独的函数,该函数接受一个元组Cars
并将它们添加到那里。
推荐阅读
- arrays - 未定义的方法 Ruby
- php - PrestaShop smarty 配置问题“exec() 已被禁用”
- sql-server - 如果小数部分相同或大于 0.5,SQL Server 如何向上舍入货币变量
- android-studio - Android Studio 图像未显示
- python - While 循环不检查列表中的现有单词
- swift - 如何使用 NavigationView 和 NavigationLink
- python - 使用字典替换DataFrame中句子中的单词
- cxf - WFLYEE0007:由于异常,未安装可选组件 org.apache.cxf.transport.servlet.CXFServlet
- command-line - Windows 10 - 如何为每个用户配置文件删除网络计算机的临时文件
- react-native - 通过调用 onPress 函数导航到新屏幕