- 实际上还是一个函数
- 提供两种不同的用法,以便指示python typehit 按你的预期工作
from typing import Any, Callable, Optional, TypeVar, overload
F = TypeVar("F", bound=Callable[..., Any])
# python 的装饰器实际上是一个以函数为参数的函数
class LogDecorator:
@overload
def log_it(self, func: F) -> F: ...
@overload
def log_it(
self, func: None = None, *, name: Optional[str] = None
) -> Callable[[F], F]: ...
def log_it(
self, func: Optional[F] = None, *, name: Optional[str] = None
) -> Callable[[F], F]:
def decorator(func: F) -> F:
print(name, func)
return func
if func is None:
return decorator
return decorator(func)
log_decorator = LogDecorator()
log_it = log_decorator.log_it
@log_it
def f():
print("f")
f()
@log_it(name="g")
def g():
print("g")
g()
学习自 langfuse Prompt Management 的 python SDK