强制自定义类型参数的属性类型

Enforcing Type of Attribute of Argument of Custom Type

使用 Python 的 typing 模块,我想创建一个自定义类型来检查参数的属性类型。更准确地说,在我的例子中,参数的类型应该是某个 class 的实例,并且属性应该是某个 Type.

用一个最小的例子可能会更清楚我想要实现的目标:

class Wrapper:
    value: typing.Any


def f(obj: WrapperType[int]) -> None:
    assert isinstance(obj, Wrapper) and type(obj.value) is int

如何创建一个 WrapperType 来反映此 assert 的行为(在输入方面)?我无法在 typing 模块的文档中找到这方面的提示。但是我不确定我是否误解了其中的内容,或者我想要的是不可能的。

Wrapper 应该继承自 Typing.Generic.

from typing import Generic, TypeVar

T = TypeVar('T')

class Wrapper(Generic[T]):
    value: T


def f(obj: Wrapper[int]) -> None:
    ...