# 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()` способствует созданию более гибкого и поддерживаемого кода, позволяя избежать жесткого кодирования имен родительских классов и обеспечивая правильную работу с множественным наследованием.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/python/vstroennye-funkcii-python/super.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
