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

Абстрактные классы в ООП в Python

Пусть у вас есть класс User, а от него наследуют классы Employee и Student.

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

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

Для этого существуют так называемые абстрактные классы. Абстрактные классы представляют собой классы, предназначенные для наследования от них. При этом объекты таких классов нельзя создать.

В Python класс делают абстрактным, если он наследует ABC из модуля abc:

from abc import ABC class User(ABC): pass # абстрактный класс

Итак, давайте напишем реализацию абстрактного класса User. Пусть у него будет приватное свойство name, а также геттеры и сеттеры для него:

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

Попытка создать объект класса User вызовет ошибку:

user = User() # выдаст ошибку

А вот унаследовать от нашего класса будет можно. Сделаем класс Employee, который будет наследовать от нашего абстрактного класса User:

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

Создадим объект класса Employee - все будет работать:

employee = Employee() employee.set_name('john') # метод родителя, т.е. класса User employee.set_salary(1000) # свой метод, т.е. класса Employee print(employee.get_name()) # выведет 'john' print(employee.get_salary()) # выведет 1000

Сделайте абстрактный класс Figure, представляющий собой геометрическую фигуру. Пусть от него наследует классы для круга, прямоугольника и квадрата.

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