Я пришел из C # фона, и для реализации шаблона стратегии мы всегда будем использовать интерфейс, например: ILoggger.Теперь, насколько я понимаю, в языках типа утка, таких как Python, мы можем избежать этого базового класса / контракта.
Мой вопрос заключается в том, является ли это наилучшим способом реализации шаблона стратегии, используя преимущества утки?И позволяет ли этот способ печатания утки понять следующему пользователю моего кода, что это «точка расширения»?Кроме того, я думаю, что лучше использовать подсказки типов, чтобы помочь следующему человеку, смотрящему на ваш код, увидеть, каким должен быть тип стратегии, но с типизацией утки без базового класса / контракта, какой тип вы используете?Один из уже конкретных классов?
Вот код:
class FileSystemLogger():
def log(self, msg):
pass
class ElasticSearchLogger():
def log(self, msg):
pass
# if i wanted to use type hints, which type should logger be here?
class ComponentThatNeedsLogger():
def __init__(self, logger):
self._logger = logger
# should it be this?
class ComponentThatNeedsLogger():
def __init__(self, logger : FileSystemLogger):
self._logger = logger
Может кто-нибудь посоветовать, какой самый стандартный / Pythonic / читаемый способ справиться с этим?
Я не ищу ответ "вот ответ в 2 строках кода".