我认为我理解python中的类继承,基本上你可以在子类上继承父类的属性以便重用,并且还可以“添加”它以使更复杂的类。
以下是我的问题:我有一个Car
类,其中(model, color, mpg)
作为参数,之后我创建了一个名为ElectricCar
的新子类,它继承自父Car
}} class ...现在,当我使用“ElectricCar
”调用(battery_type, model, color, mpg)
时,我收到以下错误:
TypeError:init()只需要2个参数(给定5个)
我知道要解决它。我需要将self.model
,self.color
和self.mpg
添加到ElectricCar
类。但为什么我必须这样做?如果我需要在子类上重新定义,这似乎会破坏继承的目的。
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
my_car = Car("DeLorean", "silver", 88)
class ElectricCar(Car):
def __init__(self,battery_type):
self.battery_type = battery_type
my_car = ElectricCar("molten salt", "Honda","black", "33")
答案 0 :(得分:5)
我需要将
self.model
,self.color
和self.mpg
添加到ElectricCar
课程。
你不是。 Python允许您调用已替换的父类的方法。您只需要显式调用父类的构造函数。
ElectricCar.__init__
的第一个参数是电池类型。将其余的位置参数存储在列表(args
)中并将它们解压缩到父构造函数:
class ElectricCar(Car):
def __init__(self, battery_type, *args):
super(ElectricCar, self).__init__(*args) # super().__init__(*args) in Py3k+
self.battery_type = battery_type
答案 1 :(得分:2)
定义__init__
方法时,将覆盖父类的__init__
方法。这样的重写是创建super()函数的原因。
答案 2 :(得分:0)
您需要在ElectricCar类中传递model,color,mpg。然后你可以调用super来初始化基类。
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
print model
print color
print mpg
my_car = Car("DeLorean", "silver", 88)
print
class ElectricCar(Car):
def __init__(self,battery_type, model, color, mpg):
self.battery_type = battery_type
print battery_type
super(ElectricCar,self).__init__( model, color, mpg)
my_car = ElectricCar("molten salt", "Honda","black", "33")