super()

1. Что такое 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
# A
  • super() удобно использовать для правильного порядка вызовов в сложных иерархиях.


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?