Шаблон проектирования, чтобы избежать проверок в каждом методе класса Python - PullRequest
0 голосов
/ 08 июня 2019

Как лучше всего избегать проверок в каждом методе.

Как видно из приведенного ниже примера, проверка происходит в каждом методе, чтобы убедиться, что приложение подключено или не подключено.

Какие-либо шаблоны проектирования или другое элегантное решение, позволяющее избежать проверок и повторения кода?

class App:

    def __init__(self):
        self._is_connected = False

    def connect(self):
        if self._is_connected:
            raise Exception('Already connected')
        pass

    def disconnect(self):
        if not self._is_connected:
            raise Exception('Already disconnected')
        pass

    def send_data(self):
        if not self._is_connected:
            raise Exception('Not connected')
        pass

    def recv_data(self):
        if self._is_connected:
            raise Exception('Not connected')
        pass

1 Ответ

0 голосов
/ 08 июня 2019

Декораторы Python - это один из способов удалить это дублирование кода.Таким образом, вы можете определить 2 функции декоратора: is_connected и is_disconnected.В функциях декоратора вы можете получить доступ к self, чтобы проверить переменную.Вот скелет определения одного из них:

def is_connected(func):
    def wrapper(self, *args, **kwargs):
        # Do the check and raise any errors
        if not self.connected:
            raise ValueError()
        func(*args, **kwargs)
    return wrapper

Затем вы будете использовать их в функциях следующим образом:

@is_disconnected
def connect(self):
    pass

@is_connected
def disconnect(self):
    pass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...