__ MyClass
или очевидно, что вы не хотите, чтобы он использовался напрямую _MyClass
). Таким образом, он может быть создан только через фабричную функцию. Будьте питонистами. Не усложняйте код чрезмерно с помощью решений на «корпоративном» языке (например, Java), которые добавляют ненужные уровни абстракции.
Ваш код должен быть простым и интуитивно понятным. Вам не нужно делегировать другому классу, чтобы создать экземпляр другого.
Есть ли способ предотвратить непосредственное создание реальных конкретных классов?
Почему? Ваши программисты - злые социопаты, отказывающиеся следовать правилам? Если вы предоставите фабрику - а фабрика делает то, что нужно людям, - тогда они будут использовать фабрику.
Ничего нельзя «предотвратить». Помните. Это Python - у них есть исходники.
следует ли мне использовать фабрику для клиента для создания окна, на всякий случай, если я могу добавить больше типов Windows в будущем?
Мех. Ни хорошо, ни плохо. Управление всеми деталями иерархии классов и фабрики может стать обременительным.
Добавить фабрику несложно. Это Python - у вас всегда есть весь исходный код - вы можете использовать grep
, чтобы найти конструктор класса и заменить его фабрикой, когда вам нужно.
Поскольку вы можете использовать grep
для поиска и исправления своих ошибок, вам не нужно заранее планировать такие вещи, как в Java или C ++.
Я вижу много руководств, в которых это делается, например, VehicleFactory, но я считаю их слишком длинными и в некотором роде также раскрывает реализацию.
"Слишком долго"? Он используется так редко, что не имеет особого значения. Используйте длинные имена - это поможет другим людям понять, что вы делаете. Это не Code Golf, где выигрывает наименьшее количество нажатий клавиш.
"обнажает реализацию"? Во-первых, он ничего не раскрывает. Во-вторых, это Python - у вас всегда есть исходный код - все уже открыто.
Перестаньте так много думать о профилактике и конфиденциальности. Это бесполезно.