に私が読んでいるレイモンドヘッティンガーのPython’s super() considered super!、この例がありますでページについて:を呼び出す `スーパー()`親クラス
class Shape:
def __init__(self, shapename, **kwds):
self.shapename = shapename
super().__init__(**kwds)
class ColoredShape(Shape):
def __init__(self, color, **kwds):
self.color = color
super().__init__(**kwds)
cs = ColoredShape(color='red', shapename='circle')
なぜそれがここShape
でsuper()
を呼び出す必要がありますか?私は、から暗黙的に継承しているので、object.__init__(**kwds)
をShape
から呼び出していることを理解しています。
はしても、その文なしに、我々はすでに親の__init__
ですでにshapename
を確立
- 、
- は親の
__init__
とを呼び出した後、 - 、子クラスの
color
明示的なメソッドのオーバーライド内を設立しましたsuper()
のColoredShape
。
私の知る限り、この行をドロップすると、同じ動作&機能を生成します。
class Shape: # (object)
def __init__(self, shapename, **kwds):
self.shapename = shapename
# super().__init__(**kwds)
class ColoredShape(Shape):
def __init__(self, color, **kwds):
self.color = color
super().__init__(**kwds)
def check(self):
print(self.color)
print(self.shapename)
cs = ColoredShape(color='red', shapename='circle')
cs.check()
# red
# circle
ここShape
内super()
の目的は何ですが?
私は、 '** kwds'を使ってあるクラスから他のクラスに引数を送って' ** kwds'から 'shapename'を取り除く方法のほんの一例だと思う - このシェイプの親は重要ではありません。たぶん 'Shape'は親を持つべきですが、すべての例では主要素ではありません。 – furas