Я читаю Raymond Hettinger Pythons 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')
Зачем нужно звонить super() в Shape здесь? Я понимаю, что это вызывает object.__init__(**kwds), поскольку Shape неявно наследует от object.
Даже без этого утверждения мы уже
- установлен
shapenameуже в родительском__init__, - установил дочерний класс
colorв явном переопределении метода, - затем вызывается родительский
__init__с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
В чем цель super() внутри Shape здесь?