Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpAbMt 132 of 174 menu
◀ ▶

Абстрактные методы в ООП в Python

Абстрактные классы также могут содержать абстрактные методы. Такие методы не должны иметь реализации, а нужны для того, чтобы указать, что такие методы должны быть у потомков. А собственно реализация таких методов - уже задача потомков.

В Python над методом ставят декоратор @abstractmethod.

Давайте попробуем на практике. Пусть предполагается, что все потомки класса User должны иметь метод increase_revenue.

Этот метод должен брать текущий доход пользователя и увеличивать его на некоторую величину, переданную параметром.

Сам класс User не знает, какой именно доход будет получать наследник - ведь у работника это зарплата, а у студента - стипендия. Поэтому каждый потомок будет реализовывать этот метод по-своему.

Суть тут в том, что абстрактный метод класса User заставляет программиста реализовывать этот метод в потомках, иначе Python выдаст ошибку при создании объекта потомка. Таким образом вы, или другой программист, работающий с вашим кодом, никак не сможете забыть реализовать нужный метод в потомке.

Итак, давайте попробуем на практике. Добавим абстрактный метод increase_revenue в класс User:

from abc import ABC, abstractmethod class User(ABC): def __init__(self): self.__name = None def get_name(self): return self.__name def set_name(self, name): self.__name = name @abstractmethod def show(self): pass # Абстрактный метод без тела: @abstractmethod def increase_revenue(self, value): pass

Пусть наш класс Employee пока останется без реализации increase_revenue. Попытка создать объект такого класса выдаст ошибку.

Давайте теперь напишем реализацию метода increase_revenue в классе Employee:

class Employee(User): def __init__(self): super().__init__() self.__salary = None def show(self): return self.get_name() def get_salary(self): return self.__salary def set_salary(self, salary): self.__salary = salary # Напишем реализацию метода: def increase_revenue(self, value): self.__salary = self.__salary + value

Проверим работу нашего класса:

employee = Employee() employee.set_name('john') employee.set_salary(1000) employee.increase_revenue(100) print(employee.get_salary())

Реализуем метод increase_revenue и в классе Student. Toлько теперь наш метод будет увеличивать уже стипендию:

class Student(User): def __init__(self): super().__init__() self.__scholarship = None # стипендия def show(self): return self.get_name() def get_scholarship(self): return self.__scholarship def set_scholarship(self, scholarship): self.__scholarship = scholarship # Метод увеличивает стипендию: def increase_revenue(self, value): self.__scholarship = self.__scholarship + value

Добавьте в ваш класс User такой же абстрактный метод increase_revenue. Напишите реализацию этого метода в классах Employee и Student.

В классе Figure сделайте абстрактные методы для получения площади и периметра фигуры.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить