在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/typing#123存储库中找到关于“Intersection”类型的讨论。
在PEP-544上有一个叫做Protocol的类似功能,你可以通过合并mixin协议来合并mixins。有一个名为PEP-544的typing_extensions的实现。也许你可以尝试使用这个库。