Python typing module: MI信

问题描述 投票:14回答:2

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 multiple-inheritance typechecking
2个回答
2
投票

现在似乎不可能。

您可以在python/typing#123存储库中找到关于“Intersection”类型的讨论。

PEP-544上有一个叫做Protocol的类似功能,你可以通过合并mixin协议来合并mixins。有一个名为PEP-544typing_extensions的实现。也许你可以尝试使用这个库。

© www.soinside.com 2019 - 2024. All rights reserved.