Устранить бизнес-логику конструктора - PullRequest
0 голосов
/ 21 марта 2020

Я бы хотел исключить бизнес-логи конструктора 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 непосредственно в конструктор (или с помощью установщиков) из клиентского модуля.

Стоит ли реализовывать в этом случае конструктор для создания и инициализации или вы знаете какой-либо другой полезный шаблон / технику для этого?

Спасибо!

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