Python新功能,使用__add__方法超过2个实例?


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 CARnBrand: {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'DOCUMENTATIONnModel: {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 CARnBrand: {self.brand}nColor: {self.color}n'
def documentation(self):
return f'DOCUMENTATIONnModel: {self.model}nYear: {self.year}nMileage: {self.mileage} Kmn' 
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个实例来显示他们的细节,但它不起作用我知道如果我打印(car1 + car2),在它下面打印(car3 + car4)会得到我想要的东西但我只是好奇如何使代码能够像上面那样运行,所有4个总结,最终我不断添加的一切都能正常工作也打印(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元组并将它们添加到那里。

最新更新