私はPythonの継承を理解しようとしています、そして以下のクラスはクラスCarWithBrakes
から継承しますCar
:
class Car :
def __init__(self , wheels):
self.wheels = wheels
self.jsonTransform = {}
self.jsonTransform['wheels'] = wheels
def toJson(self):
return self.jsonTransform
def get_wheels(self):
return self.wheels
class CarWithBrakes(Car):
def __init__(self , car, brakes):
self.car = car
self.brakes = brakes
def toJson(self):
self.jsonTransform = {}
self.jsonTransform['wheels'] = self.car.wheels
self.jsonTransform['brakes'] = self.brakes
return self.jsonTransform
c = Car("wheels")
print(c.toJson())
b = CarWithBrakes(c , "brakes")
print(b.toJson())
print(b.get_wheels())
このコードを実行すると、以下が生成されます。
{'wheels': 'wheels'}
{'wheels': 'wheels', 'brakes': 'brakes'}
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-62-9b4b5598414b> in <module>
30 b = CarWithBrakes(c , "brakes")
31 print(b.toJson())
---> 32 print(b.get_wheels())
<ipython-input-62-9b4b5598414b> in get_wheels(self)
11
12 def get_wheels(self):
---> 13 return self.wheels
14
15 class CarWithBrakes(Car):
CarWithBrakes
から継承するため、wheels属性を使用できませんCar
か?
ここには2つの問題があります。
CarWithBrakes
の__init__
メソッドをオーバーライドしますCar
。オーバーライドされたメソッドでは、wheels
属性は設定されません。通常、子クラスと共有する作業(wheels
属性の設定など)は、を介して子クラス初期化子に委任しますsuper().__init__(...)
。
次に、継承と集計を不必要に混在させています。AがCarWithBrakes
あり、相続によって車、合格する理由はありませんCar
中に保留にインスタンスをCarWithBrakes.__init__
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加