2016-09-18 6 views
-2

スーパーコンストラクタを使用して親クラスから継承したクラスを作成している場合、その同じ呼び出しを使用して子クラスを作成する属性を設定することはできますか? 私の場合、私は電気自動車を作ります。電気自動車は自動車の子クラスです。 電気自動車には、クラスのコンストラクタによって初期化される属性バッテリがあります。電気自動車を建設する最初の呼び出しで、バッテリーのサイズを指定できますか?私は私の電気自動車のコンストラクタよりもこの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): '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

wooops ..最初のインスタンスコールを変更するのを忘れました.. – driftdrift

関連する問題