Я бы хотел исключить бизнес-логи конструктора c в классе, но принудительно инициализировать объект, прежде чем он сможет использоваться клиентом.
Простой пример:
В этом случае Я хочу создать объект для манипулирования только одним INI-файлом за время его существования. Я прочитал конфиги в конструкторе, поэтому, когда объект создается, клиент может сразу же использовать их.
import configparser
import os
class ConfigParserWrapper(object):
def __init__(self, ini_file_path: str) -> None:
if not os.path.isfile(ini_file_path):
raise FileNotFoundError("Ini file is not found!")
self._ini_file_path = ini_file_path
self.__config = configparser.RawConfigParser()
self.__config.read(ini_file_path)
def modify_configs(self, section, option, value):
...
def clear_configs(self, section, option):
...
def save_configs(self):
...
Я могу поместить логи c в новый метод.
class ConfigParserWrapper(object):
def __init__(self, ini_file_path: str) -> None:
self._ini_file_path = ini_file_path
def read_configs(self):
if not os.path.isfile(self._ini_file_path):
raise FileNotFoundError("Ini file is not found!")
self.__config = configparser.RawConfigParser()
self.__config.read(self._ini_file_path)
Но в этом случае клиент должен вызвать метод после создания экземпляра.
Я не хочу создавать и передавать объект RawConfigParser непосредственно в конструктор (или с помощью установщиков) из клиентского модуля.
Стоит ли реализовывать в этом случае конструктор для создания и инициализации или вы знаете какой-либо другой полезный шаблон / технику для этого?
Спасибо!