Функция
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, который позволяет обеспечивать надлежащее разрешение и выполнение методов при наследовании и переопределении методов. Это особенно полезно при работе с классами, которые взаимодействуют в сложной иерархии наследования.
Содержание: