Я читаю 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
здесь?