Этот вопрос направлен на лучшие практики ООП.
Справочная информация:
Я создал набор сценариев, которые либо автоматически запускаются cronjobs, либо постоянно работают в фоновом режиме для сбора данных.в настоящее время.В прошлом я использовал smtplib из Python для отправки себе уведомлений, когда возникают ошибки или работа успешно завершена.Недавно я перенес эти программы на платформу Google Cloud, которая по умолчанию блокирует популярные SMTP-порты.Чтобы обойти это, я использовал почтовую команду linux, чтобы продолжать отправлять себе отчеты.
Первоначально мое хакерское решение состояло в том, чтобы иметь два отдельных модуля для отправки предупреждений, которые были инициированы на основе аргумента, который я передал основному сценарию.
Пример:
$ python mycode.py my_arg
if sys.argv[1] == 'my_arg':
mailer = Class1()
else:
mailer = Class2()
Я хочу улучшить это и создать модуль, который автоматически обрабатывает это без добавления кода.У меня есть вопрос: «Правильно ли» включать условную инструкцию при инициализации класса, чтобы справиться с ситуацией?
Пример:
Class Alert(object):
def __init__(self, sys.platform, other_args):
# Google Cloud Platform
if sys.platform == "linux":
#instantiate Class1 variables and methods
#local copy
else:
#instantiate Class2 variables and methods
Мой инстинкт кишки говорит, что это неправильно, ноЯ не уверен, какой будет правильный подход.
Меня больше всего интересуют ответы о том, как создавать ОО-классы / модули, которые обрабатывают зависимости от среды для предоставления той же услуги.В моем случае заблокированный порт требует совсем другой набор кода.
Редактировать: После некоторых предложений вот мои любимые чтения по этой теме.
http://python -3-patterns-idioms-test.readthedocs.io / en / latest / Factory.html