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())
请注意D
是A
和B
的实例,也是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 的实现。也许你可以用这个库试试。