Параметры абстрактных методов в ООП в Python
При описании абстрактных методов необходимо указывать не только имена самих методов, но и принимаемые ими параметры.
Давайте посмотрим на примере. Пусть у нас
дан абстрактный класс MathOp, описывающий класс
для математических операций сложения, вычитания,
умножения и деления. Пусть этот класс
будет выглядеть так:
from abc import ABC, abstractmethod
class MathOp(ABC):
@abstractmethod
def sum(self):
pass
@abstractmethod
def subtract(self):
pass
@abstractmethod
def multiply(self):
pass
@abstractmethod
def divide(self):
pass
Сейчас методы нашего класса не принимают никаких параметров. И на самом деле методы класса-потомка, который будет наследовать этот абстрактный класс, также не должны будут принимать параметров, иначе будет ошибка.
Давайте укажем параметры методов в нашем абстрактном классе:
from abc import ABC, abstractmethod
class MathOp(ABC):
@abstractmethod
def sum(self, a, b):
pass
@abstractmethod
def subtract(self, a, b):
pass
@abstractmethod
def multiply(self, a, b):
pass
@abstractmethod
def divide(self, a, b):
pass
Напишем теперь реализацию в классе-потомке:
class Math(MathOp):
def sum(self, a, b):
return a + b
def subtract(self, a, b):
return a - b
def multiply(self, a, b):
return a * b
def divide(self, a, b):
return a / b
Если попытаться в нашем классе задать другое количество параметров - у нас это просто не получится: Python выдаст ошибку. Таким образом мы не сможем ни случайно забыть какой-то параметр, ни случайно добавить лишний.
Пусть у нас дан такой абстрактный класс
UserBase:
from abc import ABC, abstractmethod
class UserBase(ABC):
@abstractmethod
def set_name(self, name):
pass
@abstractmethod
def get_name(self):
pass
@abstractmethod
def set_age(self, age):
pass
@abstractmethod
def get_age(self):
pass
Сделайте класс User, который будет
наследовать данный абстрактный класс.