Как «переопределить» функцию или целый модуль в Python? - PullRequest
0 голосов
/ 17 апреля 2020

Я пишу код, который выполняет IO, но не знает, как реализован этот IO. Он использует некоторые «интерфейсы», подобные следующему, и затем внедряются реализации.

class Transport:
    async def connect(self) -> None:
        raise NotImplementedError

    async def disconnect(self) -> None:
        raise NotImplementedError

    async def send_all(self, data: bytes) -> None:
        raise NotImplementedError

    async def receive_some(self) -> bytes:
        raise NotImplementedError

Как вы могли заметить, в этом коде используются сопрограммы, поэтому я также хочу использовать соответствующие sleep функция. Но что-то вроде sleep не работает с объектом, поэтому не имеет смысла иметь его как метод класса. Конечно, ничто не мешает мне просто ввести функцию с соответствующей подписью, но я бы оставил читателю кода (и комментариям) вывод, что implementation_module.some_method совпадает с interface_module.some_method.

Итак, что я в основном хочу, это python -i sh и четкий способ явно передать эту одну функцию (или даже весь модуль) «реализующей» другую, то же самое, что я могу сделать с классами. Одним из очевидных способов является создание стандартного класса с помощью методов stati c:

class ThisNameDoesntReallyMatter:
    @staticmethod
    async def sleep(seconds: float) -> None:
        raise NotImplementedError

Есть ли лучший способ?

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