Вот протокол, который я определил:
Код: Выделить всё
class OnSubscribeFunc(Protocol):
def __call__(self, instrument: str, *, x: int) -> AsyncGenerator:
...
Код: Выделить всё
class A:
async def subscribe(self, instrument: str, *, x: int):
yield ...
a: OnSubscribeFunc = A().subscribe # this apparently is where it gets it wrong
Однако если я удалю * из своей реализации, предупреждение исчезнет. Я ожидал бы, что все будет наоборот, потому что отсутствие * позволяет реализации иметь аргументы, не состоящие только из ключевых слов, что может быть не тем, к чему я стремлюсь с помощью моего протокола.
Итак, для сравнения: эта реализация не выдает никаких предупреждений:
Код: Выделить всё
class A:
async def subscribe(self, instrument: str, x: int):
yield ...
Подробнее здесь: https://stackoverflow.com/questions/791 ... o-have-dif