Я пишу код, который выполняет 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
Есть ли лучший способ?