> For the complete documentation index, see [llms.txt](https://bemind.gitbook.io/neural/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bemind.gitbook.io/neural/python/vstroennye-funkcii-python/super.md).

# super()

Функция `super()` в Python используется для вызова методов родительского или родственного класса.

**Назначение**:

* Получить доступ к методам и свойствам родительского или родственного класса.
* Обеспечить корректную работу с множественным наследованием.

**Возврат**:

* Возвращает объект-прокси, который делегирует вызовы методов родительскому или родственному классу.

**Описание**:

* Может быть вызвана без аргументов в методах класса (Python 3).
* В Python 2 и в некоторых случаях в Python 3 может принимать два аргумента:
  1. `type` - тип объекта, для которого ищется родительский класс.
  2. `object` - объект, относительно которого ищется родительский класс.
* Используется для вызова конструкторов, методов и доступа к свойствам родительских классов.

**Примеры**:

1. ***Вызов конструктора родительского класса***
2. ***Переопределение метода с использованием super()***
3. ***Использование с множественным наследованием***

{% tabs %}
{% tab title="1." %}

```python
class Parent:
    def __init__(self, name):
        self.name = name

class Child(Parent):
    def __init__(self, name, age):
        super().__init__(name)
        self.age = age

child = Child("Alice", 10)
print(child.name, child.age)  # Выведет: Alice 10
```

{% endtab %}

{% tab title="2." %}

```python
class Animal:
    def speak(self):
        return "Some sound"

class Dog(Animal):
    def speak(self):
        return super().speak() + " and Woof!"

dog = Dog()
print(dog.speak())  # Выведет: Some sound and Woof!
```

{% endtab %}

{% tab title="3." %}

```python
class A:
    def method(self):
        print("A method")

class B(A):
    def method(self):
        print("B method")
        super().method()

class C(A):
    def method(self):
        print("C method")
        super().method()

class D(B, C):
    def method(self):
        print("D method")
        super().method()

D().method()
# Выведет:
# D method
# B method
# C method
# A method
```

{% endtab %}
{% endtabs %}

**Использование**:

* Для вызова методов родительского класса при их переопределении.
* В конструкторах для инициализации родительской части объекта.
* При работе с множественным наследованием для корректного вызова методов всех родительских классов.
* Для доступа к свойствам и методам родительских классов без явного указания их имен.

Функция `super()` является мощным инструментом в объектно-ориентированном программировании на Python. Она позволяет эффективно работать с иерархией классов, особенно в случаях множественного наследования.

Важно понимать, что `super()` не всегда обращается к непосредственному родительскому классу. В случае множественного наследования она следует порядку разрешения методов (Method Resolution Order, MRO), который определяет порядок поиска методов в иерархии классов.

Использование `super()` способствует созданию более гибкого и поддерживаемого кода, позволяя избежать жесткого кодирования имен родительских классов и обеспечивая правильную работу с множественным наследованием.
