2016-09-18 4 views
-2

Если я использую супер-конструктор для создания класса, унаследованного от родительского класса, можно ли использовать тот же самый вызов для установки атрибута для создания дочернего класса? Итак, я создал электрический автомобиль. Электрический автомобиль - это детский класс автомобиля. Электрический автомобиль имеет батарею атрибута, которая будет инициализирована через его конструктор класса. Могу ли я указать размер батареи в моем первоначальном звонке, чтобы построить Электрический автомобиль?Как разрешить этот супер-дочерний вызов наследования наследования Python?

В настоящее время его дает мне ошибку, потому что у меня есть супер-вызов, который имеет меньше параметров, чем мой электрический конструктор автомобиля

Ex:

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

Смежные вопросы