Как super() может (очевидно) разрешать и вызывать несколько методов?Python

Программы на Python
Ответить
Anonymous
 Как super() может (очевидно) разрешать и вызывать несколько методов?

Сообщение Anonymous »

Я работаю над кодом Python, который, кажется, хорошо подходит для множественного наследования, и я читаю о множественном наследовании и super(), чтобы убедиться, что я правильно понимаю, как они работают .
Насколько я понимаю, super() заключается в том, что, перефразируя, он обходит порядок разрешения методов класса и возвращает своего рода «диспетчер», при котором осуществляется доступ к методу или атрибуту. через __getattr__ получает доступ к «первая» реализация этого метода или атрибута, как того требует MRO.
Однако этот пример из RealPython меня сбил с толку. (Я добавил операторы печати и отредактировал их пример, удалив все функциональные методы, поскольку все, что меня здесь волнует, это то, как super() работает с MRO и различными __init__ методы.)

Код: Выделить всё

class Rectangle:
def __init__(self, length, width, **kwargs):
print("Running Rectangle.__init__")
self.length = length
self.width = width
super().__init__(**kwargs)

class Square(Rectangle):
def __init__(self, length, **kwargs):
print("Running Square.__init__")
super().__init__(length=length, width=length, **kwargs)

class Triangle:
def __init__(self, base, height, **kwargs):
print("Running Triangle.__init__")
self.base = base
self.height = height
super().__init__(**kwargs)

class RightPyramid(Square, Triangle):
def __init__(self, base, slant_height, **kwargs):
print("Running RightPyramid.__init__")
self.base = base
self.slant_height = slant_height
kwargs["height"] = slant_height
kwargs["length"] = base
super().__init__(base=base, **kwargs)

_ = RightPyramid(10, 5)
Я ожидаю, что, поскольку в порядке наследования RightPyramid Square предшествует Triangle, super(RightPyramid).__init__ эквивалентен Square.__init__. И действительно:

Код: Выделить всё

>>> super(RightPyramid).__init__


Подробнее здесь: [url]https://stackoverflow.com/questions/79227618/how-is-super-able-to-apparently-resolve-to-and-call-multiple-methods[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»