@newPsevdonim
Python разработчик

Можно ли запретить вызов init при создании ссылки на экземпляр класса?

У меня есть сингалтон класс, в функции __init__ у меня есть ряд переменных окружения, которые я хочу использовать в дальнейшем, но при создании ссылки на уже существующий экземпляр класса, они пропадают. (При иницилизации они равны None). Отсюда вопрос можно ли как то, запретить вызов метода __init__ при создании ссылки на класс ну или по другому решить эту проблему?

Вот часть класса, о которой в вопросе идет речь.

class GetData:
    instance = None

    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)

        return cls.instance

    def __init__(
        self,
        host=None,
        user=None,
        password=None,
        port=None,
    ):
        if (
            (host is not None)
            and (user is not None)
            and (password is not None)
            and (port is not None)
        ):
            self.client = Client(host=host, user=user, password=password, port=port)
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Можно не создавать __init__(), а его логику поместить в __new__(), ну или вынести в отдельный приватный метод, который вызывать из __new__().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы