如何编写一个 Python 类型提示来指定一个接受某些参数或 0 个参数的 Callable?

How to write a Python type hint that specifies a Callable that takes certain parameters or 0 parameters?

我有以下代码

def func1(f: Callable):
    def decorator(*args, **kwargs):
        # do something
        return f(*args, **kwargs)

    return decorator


@func1
def func2(parameter: str):
    # do something else
    ...

我想指定 func1 接受一个 Callable,该 Callable 要么具有 1 个特定类型的参数(在本例中为 str),要么根本没有参数,这样我不仅可以将它用于 func2,而且使用另一个不带参数的函数,如以下函数

@func1
def func3():
    # this function doesn't take any parameters

显然即使有解决方案,它实际上也不会有效,因为类型提示无论如何都会被忽略,但我想使用 Pydnatic 添加实际验证,这就是为什么我想指定函数必须有一个某种类型的参数或根本没有参数。

I want to specify that func1 takes a Callable that has either 1 parameter of a certain type (in this case, a str), or no parameters at all

使用两个签名的并集:

 func : Callable[[str], Any] | Callable[[], Any])