
Функция
super()в Python предоставляет доступ к родительским методам, которые были переопределены в классе-потомке. Это встроенная функция Python, используемая для вызова метода в суперклассе, которую переопределил подкласс.
Функция super() предоставляет временный доступ к следующему классу в MRO (method resolution order, порядок разрешения методов) текущего объекта. Это означает, что super() функция всегда ссылается на родительский класс.
class Parent:
def test(self):
print("Parent method")
class Child(Parent):
def test(self):
super().test()
print("Child method")
c = Child()
c.test()
# Parent method
# Child methodЗдесь метод test() класса Child вызывает метод test() класса Parent при помощи функции super().
В Python 3 super() функция может быть вызвана без аргументов в методах:
class Parent:
def test(self):
print("Parent method")
class Child(Parent):
def test(self):
super().test() # Python 3 позволяет вызвать super() без аргументов
print("Child method")Вызов функции super() в классе подразумевает передачу аргументов из метода класса-потомка в соответствующий метод родительского класса. Это может быть полезно, когда родительский класс требует определенных аргументов для его методов:
class Parent:
def test(self, message):
print(f"Parent method: {message}")
class Child(Parent):
def test(self, message):
super().test(message + ", extended in Child")
c = Child()
c.test("Hello")
# Parent method: Hello, extended in ChildФункция super() также работает с множественным наследованием, предоставляя доступ к методам во всех суперклассах:
class Parent1:
def test(self):
print("Parent1 method")
class Parent2:
def test(self):
print("Parent2 method")
class Child(Parent1, Parent2):
def test(self):
super().test() # вызывает метод test() класса Parent1
Parent2.test(self) # можно также напрямую вызвать метод класса Parent2
print("Child method")
c = Child()
c.test()
# Parent1 method
# Parent2 method
# Child methodФункция super() часто используется в конструкторе __init__() для обеспечения инициализации родительских классов перед инициализацией класса-потомка:
class Parent:
def __init__(self, value):
print("Parent __init__")
self.value = value
class Child(Parent):
def __init__(self, value):
super().__init__(value) # вызов __init__() класса Parent
print("Child __init__")
self.value *= 2
c = Child(10)
print(c.value)
# Parent __init__
# Child __init__
# 20Функция super() — это мощный инструмент в Python, который позволяет обеспечивать надлежащее разрешение и выполнение методов при наследовании и переопределении методов. Это особенно полезно при работе с классами, которые взаимодействуют в сложной иерархии наследования.
Содержание: