我想静态地强制类的方法返回一个包装在某种抽象类型中的值,而我对此一无所知:
例如给定抽象类
F = ???
class ThingF(Generic[F]):
@abstractmethod
def action(self) -> F[Foo]:
...
我希望能够静态检查这是否无效:
class ThingI(ThingF[List]):
def action(self) -> Foo:
...
因为action
不返回List[Foo]
。
但是,上面的 ThingF 声明甚至无法运行,因为 Generic 期望其参数是类型变量,而我找不到使 F
一个“有洞”的类型变量。
两者
F = TypeVar('F')
和
T = TypeVar('T')
F = Generic[T]
不起作用,因为 TypeVar
不可下标,或者 Generic[~T]
无法用作类型变量。
基本上我想要的是一个“更高种类的类型变量”,一个类型构造函数的抽象,如果你愿意的话。 IE。意思是“F 可以是任何需要另一种类型来生成具体类型的类型”。
有什么方法可以用 Python 的类型注释来表达这一点,并用 mypy
对其进行静态检查吗?
最佳答案
不幸的是,类型系统(如 PEP 484 中所述)不支持更高种类的类型——这里有一些相关的讨论:https://github.com/python/typing/issues/548 .
mypy 和其他类型检查工具可能会在未来的某个时候获得对它们的支持,但我不会屏住呼吸。这需要一些相当复杂的实现工作才能完成。
关于python - 通过类型注释对 Python 中的类型构造函数进行抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52220962/