Я понимаю, что использование @abstractmethod
в ABC
означает, что метод должен быть реализован в конкретной реализации ABC
.
Что если у меня есть класс с методами, которые можно быть переопределенным, но не обязательно?Как лучше всего сообщить пользователям, что метод должен быть переопределен для обеспечения функциональности?
Ситуация, когда базовый метод имеет значение :
import warnings
class BaseClass(object):
def foo(self):
"""This method can do things, but doesn't."""
warnings.warn('This method must be overridden to do anything.')
class ConcreteClass(BaseClass):
def foo(self):
"""This method definitely does things."""
# very complex operation
bar = 5
return bar
Использование:
>>> a = ConcreteClass()
>>> a.foo()
5
Ситуация, когда базовый метод не переопределен:
import warnings
class BaseClass(object):
def foo(self):
"""This method can do things, but doesn't."""
warnings.warn('This method must be overridden to do anything.')
class ConcreteClass(BaseClass):
def other_method(self):
"""Completely different method."""
# code here
def yet_another_method(self):
"""One more different method."""
# code here
Использование:
>>> a = ConcreteClass()
>>> a.foo()
__main__:1: UserWarning: This method must be overridden to do anything.
Причина, по которой я хочу использовать базовый методделать что-либо вообще в основном из-за удобства для пользователя.Коллеги в моей группе, у которых меньше опыта использования программного обеспечения, могут получить выгоду от удара сзади, напоминая им, что сценарий, который они написали с моим пакетом, не сломан, они просто забыли добавить что-то.