我想明白,当我们在Python中实例的子类,例如创建什么样的对象:通过调用这个类的构造函数Python的超级(),究竟发生了什么?
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
class ElectricCar(Car):
def __init__(self, make, model, year):
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2016)
当我们创建对象my_tesla,我们实例化类ElectricCar,它依次调用父项的构造函数。它是如何发生的?现在我有两个猜测:
1)super()只是对父类的引用,所以我们通过“super()”调用父类的构造函数init(make,model,year)“实例化我们的子类。因此,我们只有我们类ElectricCar()的一个对象。 2)super(),调用父类的构造函数,创建“Car”类的对象,然后通过“super()”调用该对象的构造函数。年)”。因此,我们有两个对象:类Car()的一个对象和ElectiricCar类的一个对象,在我们的例子中它们是相同的。
哪一个是正确的? 如果没有,那么请解释一下到底发生了什么的:
super().__init__(make, model, year)
没有。你仍然只有一个物体,一个'ElectricCar'。构造函数与其他任何函数一样。它不会为你“创建”一个对象 - 在执行构造函数时,该对象已经由底层运行时创建。构造函数只是在那里初始化那个新的对象。所以调用super().__ init__只是运行一个普通的对象方法。该方法是构造函数的事实是无关紧要的。只有当它由对象构建器自动执行时才是构造器。 –
http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods – jbat100