python 类型模块:Mixin



typing下是否有任何类的行为像mixin?

例如

from typing import Union
class A:
pass
class B:
pass
class C:
pass
class D(A, B, C):
pass
# current: ab is A or B, but not both
def f(ab: Union[A, B]):
pass
# ideal: ab is A and B
def f(ab: Mixin[A, B]):
pass
f(D())

请注意DAB的实例,也是C。这对f来说限制太大(因为f不需要C(,因此,参数ab不一定是D类型,而是Mixin[A, B]

如果typing模块不提供任何选项,还有什么比创建我自己的class AB(A, B)更优雅的吗?

目前似乎是不可能的。

你可以在python/typeping#123存储库中找到关于"交叉"类型的讨论。

PEP-544 上有一个类似的功能,称为协议,您可以通过合并 mixin 协议来合并 mixin。 PEP-544 有一个称为 typing_extensions 的实现。也许你可以用这个库试试。

最新更新