Должны ли конструкторы Python запускать службы или только инициализировать переменные? - PullRequest
1 голос
/ 06 марта 2019

Я создаю класс Python, который должен управлять службой Docker через Python Docker SDK.

Должен ли я запускать контейнер Docker в конструкторе моего класса или лучше создать метод start()который потом нужно вызывать вручную (а в конструкторе инициализировать только атрибуты класса)?

Для C ++ есть идиома RAII, где в конструкторе будет установлено соединение, для Java я всегда слышалчто конструктор должен быть легковесным и не выполнять каких-либо вычислений или других «тяжелых» вещей.

Как лучше всего использовать Python?

1 Ответ

0 голосов
/ 06 марта 2019

Прежде всего, я хотел бы выделить здесь использование неверной терминологии.Конструктор и инициализатор - это две разные вещи в Python.Конструкторы реализованы с помощью метода __new__, который контролирует создание объекта класса.Инициализатор использует метод __init__ и управляет инициализацией объекта после того, как он был создан.

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

Теперь перейдем к вашему вопросу, это зависит от того, как вы хотите контролировать свое приложение, я делаюне вижу никаких проблем, если вы запускаете контейнер в initliazer класса, т.е. внутри __init__.Что бы это сделать, как только объект будет создан, он также запустит контейнер докера.

Однако, если вы хотите быть более явным об этом и хотите иметь отдельные методы экземпляра для start иstop, даже это не было бы проблемой, просто теперь вам нужно явно вызывать метод start после создания объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...