super()
1. Что такое super()
super()super()возвращает родительский (базовый) класс текущего класса.Позволяет вызывать методы родителя без явного указания имени класса.
Часто используется для расширения поведения родительских методов при наследовании.
2. Синтаксис
class Child(Parent):
def method(self):
super().method() # вызов метода родителяВ Python 3 достаточно
super()без аргументов.В Python 2 нужно было указывать класс и self:
super(Child, self).method()
3. Примеры использования
Пример 1: Расширение метода родителя
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
super().speak() # вызов метода родителя
print("Dog barks")
dog = Dog()
dog.speak()
# Output:
# Animal speaks
# Dog barksПример 2: Инициализация родительского конструктора
class Person:
def __init__(self, name):
self.name = name
class Employee(Person):
def __init__(self, name, position):
super().__init__(name) # инициализация родителя
self.position = position
e = Employee("Alice", "QA Engineer")
print(e.name, e.position) # Alice QA EngineerПример 3: В множественном наследовании
class A:
def show(self):
print("A")
class B(A):
def show(self):
print("B")
super().show()
class C(B):
def show(self):
print("C")
super().show()
c = C()
c.show()
# Output:
# C
# B
# Asuper()удобно использовать для правильного порядка вызовов в сложных иерархиях.
4. Применение в автотестах
Page Object Model: наследование базового класса страницы
class BasePage:
def open(self, url):
print(f"Opening {url}")
class LoginPage(BasePage):
def open(self, url):
super().open(url) # вызов базового метода
print("Filling login form")
page = LoginPage()
page.open("https://example.com/login")Расширение утилитарных методов:
class Logger:
def log(self, msg):
print(f"[LOG]: {msg}")
class TestLogger(Logger):
def log(self, msg):
super().log(msg)
print(f"[TEST LOG]: {msg}")
logger = TestLogger()
logger.log("Step 1 completed")💡 Вывод:
super()позволяет вызывать методы родительских классов, расширять их поведение и корректно работать с наследованием, особенно в множественном наследовании.Очень полезен в Page Object Model, расширении утилит и построении иерархий классов в автотестах.
Last updated
Was this helpful?