Предположим, у нас есть некоторая функция func, которая сопоставляет экземпляры класса A с экземплярами класса B, т.е. она имеет сигнатуру Callable[[A], B] .Я хочу написать декоратор класса autofunc для подклассов A, который автоматически применяет func к экземплярам по мере их создания. Например, представьте себе автоматическую jit-компиляцию на основе глобальной переменной среды. Это можно сделать с помощью
from functools import wraps
error: Variable "basecls" is not valid as a type [valid-type]
error: Invalid base class "basecls" [misc]
также существует проблема, заключающаяся в том, что WrapperClass.__new__ возвращает экземпляр B, а не WrapperClass.
Есть ли в настоящее время способ правильно ввести подсказку для такого декоратора класса, или mypy еще не способен с этим работать?
Пример кода:
from functools import wraps
class A:
pass
class B:
pass
def func(cl: A) -> B:
print(f"Replacing {cl=}")
return B()
def autofunc(basecls: type[A]) -> type:
@wraps(basecls, updated=())
class WrappedClass(basecls):
Предположим, у нас есть некоторая функция func, которая сопоставляет экземпляры класса A с экземплярами класса B, т.е. она имеет сигнатуру Callable[[A], B] .[b]Я хочу написать декоратор класса autofunc для подклассов A, который автоматически применяет func к экземплярам по мере их создания. Например, представьте себе автоматическую jit-компиляцию на основе глобальной переменной среды. Это можно сделать с помощью from functools import wraps
что mypy очень не нравится, что вызывает ошибки: [list] [*]error: Variable "basecls" is not valid as a type [valid-type] [*]error: Invalid base class "basecls" [misc] также существует проблема, заключающаяся в том, что WrapperClass.__new__ возвращает экземпляр B, а не WrapperClass. [/list] Есть ли в настоящее время способ правильно ввести подсказку для такого декоратора класса, или mypy еще не способен с этим работать?
Пример кода: from functools import wraps
class A: pass
class B: pass
def func(cl: A) -> B: print(f"Replacing {cl=}") return B()
def autofunc(basecls: type[A]) -> type[B]:
@wraps(basecls, updated=()) class WrappedClass(basecls):
Как я могу привлечь аргумент в декоратор, чтобы ограничить тип возврата функции, оформленную, при поддержании подсказки типа Docstring и Argery в моем IDE при вызове украшенной функции? />
from functools import wraps
Это немного сбивает с толку: декоратор не принимает аргументов, в то время как фабрика декоратора принимает аргументы и все еще возвращает декоратора, который украшает функцию. def before_run(func):
print hello from before run
def handle_arg(a,b):...
Это немного сбивает с толку: декоратор не принимает аргументов, в то время как фабрика декоратора принимает аргументы и все еще возвращает декоратора, который украшает функцию. def before_run(func):
print( hello from before run )
В настоящее время я самостоятельно изучаю функциональное программирование, пишу библиотеку монад на Python. И у меня проблемы с подсказками типов. Так, например, в Haskell есть функция filterM с сигнатурой
filterM :: (a -> m Bool) -> -> m