:我々は、オブジェクトmy_teslaを作成するとPythonのsuper()、どういうことが起こりますか?私は例えば、私たちは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)
、私たちは、このクラスのコンストラクタを呼び出すことにより、クラスElectricCarをインスタンス化し、彼は順番に親のコンストラクタを呼び出します。それはどうやって起こるの?今度は2つの推測があります:
1)super()は親クラスへの参照に過ぎないので、親のコンストラクタを "super()。init(make、model、year)"と呼びます。私たちの子クラスをインスタンス化します。その結果、私たちのクラスElectricCar()のONEオブジェクトが得られました。
2)super()、親のコンストラクタを呼び出して、 "Car"クラスのオブジェクトを作成してから、このオブジェクトのコンストラクタを "super()。init(make、年)"。その結果、2つのオブジェクト:Car()クラスの1つのオブジェクトとElectiricCarクラスの1つのオブジェクト(この場合は同じですが)。
どちらが正しいですか?どちらも、その後、正確に何が起こるかを説明していないしてください場合は :
super().__init__(make, model, year)
いいえ。あなたはまだ1つのオブジェクト、 'ElectricCar'しか持っていません。コンストラクタは他のどのような関数でもあります。それはあなたのためのオブジェクトを "作成"しません - コンストラクタが実行される頃には、そのオブジェクトは基礎となるランタイムによって既に作成されていました。コンストラクタはその新しいオブジェクトをINITIALIZEするためのものです。 super().__ init__を呼び出すだけで、単純なオブジェクトメソッドが実行されます。そのメソッドがコンストラクタであるという事実は無関係です。それはオブジェクトビルダーによって自動的に実行されるときだけコンストラクタです。 –
http://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods – jbat100