super() — это встроенная функция Python, которая возвращает прокси-объект, позволяя вам обращаться к родительскому классу с помощью «super». Метод super() в Python дает вам доступ к методам в суперклассе из унаследованного от него подкласса, его можно использовать для получения унаследованных методов от родительского или родственного класса.
Как вызвать функцию super() в Python3
Чтобы вызвать функцию super() в Python, создайте родительский и дочерний классы, наследуйте родительский класс дочернему классу, а затем вызовите метод super() из дочернего класса.
|
1 2 3 4 5 6 7 |
class MyParentClass(): def __init__(self): pass class SubClass(MyParentClass): def __init__(self): super() |
Как видите, это базовая установка одиночного наследования.
Мы можем видеть базовый или родительский класс(также иногда называемый суперклассом) и производный класс или подкласс, но нам все еще нужно инициализировать родительский или базовый класс в подклассе, производном или дочернем.
Мы можем вызвать функцию super(), чтобы сделать процесс более доступным. Функция super() призвана предоставить гораздо более абстрактное и переносимое решение для инициализации классов.
Пример 1
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Computer(): def __init__(self, computer, ram, ssd): self.computer = computer self.ram = ram self.ssd = ssd class Laptop(Computer): def __init__(self, computer, ram, ssd, model): super().__init__(computer, ram, ssd) self.model = model lenovo = Laptop('lenovo', 2, 512, 'l420') print('This computer is:', lenovo.computer) print('This computer has ram of', lenovo.ram) print('This computer has ssd of', lenovo.ssd) print('This computer has this model:', lenovo.model) |
В приведенном выше примере мы определили один базовый класс — Computer, и производный класс — Laptop.
Мы определили три свойства внутри базового класса; производный класс имеет четыре свойства.
Три свойства производного класса являются производными от базового класса, а четвертое является свойством. Кроме того, производный или дочерний класс имеет свойство модели. Остальные три получены из компьютера базового класса.
Итак, если мы создадим только объект производного класса, у нас все равно будет доступ к свойству базового класса благодаря функции super().
Выход

Пример 2
Когда вы определяете метод родительского класса в дочернем классе, этот процесс называется переопределением.
Другими словами, дочерний класс может переопределить методы своего родителя или суперкласса, определив функцию с тем же именем.
Тем не менее, есть некоторые правила переопределения:
- Имя метода должно совпадать с его параметрами.
- Если метод суперкласса является закрытым(с префиксом с двойным подчеркиванием), вы не можете его переопределить.
В Python вы можете использовать метод super() для переопределения. Он имеет следующий синтаксис.
|
1 |
super(class_name, self).override_method_name() |
См. следующий код.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class base(object): def base_func(self): print('Method of base class') class child(base): def base_func(self): print('Method of child class') super(child, self).base_func() class next_child(child): def base_func(self): print('Method of next_child class') super(next_child, self).base_func() obj = next_child() obj.base_func() |
Выход
|
1 2 3 |
Method of next_child class Method of child class Method of base class |
Python super() с __init__()
super() — это встроенная в Python функция, которая позволяет вам вызывать метод из родительского класса. Он обычно используется с __init__(), чтобы убедиться, что код инициализации родительского класса выполняется до кода инициализации дочернего класса.
Пример
|
1 2 3 4 5 6 7 8 9 10 |
class Parent: def __init__(self): print("Parent __init__ called") class Child(Parent): def __init__(self): print("Child __init__ called") super().__init__() child_instance = Child() |
В этом примере кода у нас есть два класса: Parent и Child. Класс Child наследуется от класса Parent. Мы хотим убедиться, что метод __init__() класса Parent вызывается при создании экземпляра класса Child.
Когда мы создадим экземпляр класса Child, вывод будет таким:
|
1 2 3 |
Child __init__ called Parent __init__ called |
Это связано с тем, что вызов super().__init__() в методе __init__() класса Child гарантирует, что метод __init__() класса Parent вызывается после оператора печати «Вызвана функция инициализации дочернего элемента».
Вы также можете использовать super() с __init__() при передаче аргументов в метод __init__() родительского класса:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
class Parent: def __init__(self, name): self.name = name print(f"Parent __init__ called with name: {self.name}") class Child(Parent): def __init__(self, name, age): self.age = age print(f"Child __init__ called with age: {self.age}") super().__init__(name) child_instance = Child("Alice", 10) |
В этом примере метод __init__() родительского класса принимает аргумент name, а метод __init__() класса Child принимает аргументы name и age. При вызове super().__init__(name) в дочернем классе мы передаем аргумент name методу __init__() родительского класса.
