Как аннотировать тип возвращаемого значения для функции 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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