Задать вопрос

Как реализовать исключение при неправильном состоянии класа?

Друзья есть класс runner, у которого есть методы load_config, connect, run_query, run_sp и.т.д. каждый из которых устанавливает пременную класа state в свое значение. Как правильно реализовать проверку которая возбуждала бы исключение при неправильном порядке вызова методов, например вызываем run_query до connect используя декораторы.
Моя основная проблема в том что я не могу разобраться как из декоратора обратиться к переменной класса:

пример вымошленный:
class Runner:
    def __check_state__(func):
        return func
        #как написать декоратор чтобы который возбуждал бы исключение если какой либо из методов запущен не в том порядке?
        #как обратится в декораторе к self.state

    @__check_state__
    def __get_logger__(self, loglevel):
        .......
        self.state = STATE_LOGGING

    @__check_state__
    def connect(self):
        .......
        self.state = STATE_CONECTED
  • Вопрос задан
  • 193 просмотра
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@bromzh
Drugs-driven development
просто опиши твой декоратор вне класса и создай сам враппер с нужной сигнатурой (первым агрументом поставь self). что-то типа такого:
from functool import wraps

def decorator(func):
    @wraps(func)
    def wrapper(self, *args, **kwargs):
        if self.whatever == "something":
            raise Exception()
        return func(self, *args, **kwargs)
    return wrapper
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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