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

时间:2019-11-19 15:13:24

标签: python typing

使用Python的typing模块,我想创建一个自定义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模块的文档中找不到关于此的提示。但是我不确定我是否误解了那里的东西,或者我想要的东西是不可能的。

1 个答案:

答案 0 :(得分:3)

Wrapper应该继承自Typing.Generic

from typing import Generic, TypeVar

T = TypeVar('T')

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


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