2016-09-18 39 views
-2

如果我使用超级构造函数来创建从父类继承的类,是否可以使用相同的调用来设置属性来创建子类? 因此,我在创造一辆电动车。电动汽车是汽车的小孩。 电动汽车有一个属性电池,它将通过它的Class构造函数进行初始化。我可以在我最初的电话中指定电池的大小来构建电动汽车吗?如何解决这个Python继承超子调用?

目前它给我的错误,因为我有一个比我的电动车的构造函数有参数少

防爆超级电话:

class Car(): 
    def __init__(self,model,year): 
     self.model = model 
     self.year = year 
    def getInfo(self): 
     print(self.model, self.year) 

class ElectricCar(Car): 
    def __init__(self, model, year, battery_size): 
     super().__init__(model, year) 
     self.battery = Battery(battery_size) 

class Battery(): 
    def __init__(self, battery_size=70): 
     self.battery_size = battery_size 

    def describe_battery(self): 
     print("Battery size is", self.battery_size) 

my_tesla = ElectricCar('TeslaX', 2016) 
my_tesla.getInfo() 
    print(my_tesla.battery) 
my_tesla.battery.describe_battery() 

my_big_tesla = ElectricCar('TeslaY', 2016, 90) 
my_big_tesla.battery.describe_battery() 
+1

我不认为错误是你认为它是:这将导致唯一的线这里的错误是当你实例化my_tesla时,因为你不提供电池大小。但是你应该发布你得到的完整错误。 –

+2

只是一个评论:不要做像'describe_battery'这样的东西。使用'__repr__'和'__str__'方法。 'def __repr __(self):return'Battery(batter_size = {})'.format(self.batter_size)'。不只是'print(my_big_test.battery)' – MaxNoe

回答

1

你不给电池尺寸这里:

my_tesla = ElectricCar('TeslaX', 2016) 

将其更改为:

my_tesla = ElectricCar('TeslaX', 2016, 1337) # 1337 is battery size. 

如果你希望提供一个默认的,你也应该在ElectricCar供应它像这样:

def __init__(self, model, year, battery_size=70): 
    super().__init__(model, year) 
    self.battery = Battery(battery_size) 
+0

woops ..忘了改变我的第一个实例电话.. – driftdrift