Как аннотировать тип возвращаемого значения для функции Python, возвращающей класс, определенный внутри этой функции? ⇐ Python

Программы на Python
Anonymous
Как аннотировать тип возвращаемого значения для функции Python, возвращающей класс, определенный внутри этой функции?

Сообщение Anonymous »

Предположим, у меня есть декоратор, использующий вызываемый класс в качестве оболочки. Например:

Код: Выделить всё

from functools import wraps
from typing import Any, Callable, cast

def decorator(*args: Any, **kwargs: Any) -> Any:
class Wrapper:
def __init__(self) -> None:
self.args = args
self.kwargs = kwargs

def __call__(self, func: Callable[..., Any]) -> Callable[..., Any]:
@wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> Any:
return func(*args, **kwargs)

return wrapper

return Wrapper()
Как правильно аннотировать тип возвращаемого типа?
На данный момент я обнаружил, что следующий «трюк» наследования работает так, как я ожидал:
p>

Код: Выделить всё

from functools import wraps
from typing import Any, Callable, cast

class BaseWrapper:
def __call__(self, func: Callable[..., Any]) -> Callable[..., Any]:
@wraps(func)
def wrapper(*args: Any, **kwargs: Any) -> Any:
return func(*args, **kwargs)

return wrapper

def decorator(*args: Any, **kwargs: Any) -> BaseWrapper:
class Wrapper(BaseWrapper):
def __init__(self) -> None:
self.args = args
self.kwargs = kwargs

return Wrapper()
А есть ли другой способ? Я просто не хочу, чтобы BaseWrapper находился в пространстве имен модуля.


Подробнее здесь: https://stackoverflow.com/questions/771 ... fined-with

Вернуться в «Python»