> For the complete documentation index, see [llms.txt](https://igor-19.gitbook.io/qa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://igor-19.gitbook.io/qa/avtomatizaciya-testirovaniya/python/oop-v-python-vo-vsekh-podrobnostyakh/super-.__init__-inicializaciya-iz-roditelskogo-klassa.md).

# super().\_\_init\_\_() - Инициализация из родительского класса

Используется, в паттерне DRY, например.

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

class Student(Person):
	def __init__(self, name, surname):
		super().__init__(name)
		self.surname = surname

s = Student("Ivan", "Ivanoff")

print(s.__dict__)
# {"name": "Ivan", "surname": "Ivanoff"}
12345678910111213
```

> \[!info] `super().__init__()` - расположение имеет значение\
> Если он будет снизу всех переменных, то вызов `__init__()` родительского класса может переписать переменные с одинаковым именем.

```python
class GreetingFormal:

    def __init__(self):
        self.formal_greeting = "Добрый день,"

    def greet_formal(self, name):
        return f"{self.formal_greeting} {name}!"


class GreetingInformal:

    def __init__(self):
        self.informal_greeting = "Привет,"

    def greet_informal(self, name):
        return f"{self.informal_greeting} {name}!"


class GreetingMix(GreetingFormal, GreetingInformal):

    def __init__(self):
        GreetingFormal.__init__(self)
        GreetingInformal.__init__(self)


mixed_greeting = GreetingMix()
print(mixed_greeting.greet_formal("Пользователь"))
print(mixed_greeting.greet_informal("Пользователь"))
12345678910111213141516171819202122232425262728
```

В методе  `__init__` класса `GreetingMix` не используется `super()`  - используется непосредственный вызов из базовых классов с указанием имён этих классов.

Из-за того, что метод `__init__` присутствует в обоих базовых классах и происходит конфликт.

Интерпретатор при использовании функции `super()` в нашем примере использовал бы метод того класса, который стоит левее при перечислении в объявлении производного класса.

***

* <https://academy.yandex.ru/handbook/python/article/volshebnye-metody-pereopredelenie-metodov-nasledovanie>

<br>
