编程语言
首页 > 编程语言> > python输入模块:Mixin

python输入模块:Mixin

作者:互联网

打字时是否有任何类似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]

如果输入模块没有提供任何选项,是否还有比创建我自己的AB类(A,B)更优雅的东西?

解决方法:

现在似乎不可能.

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

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

标签:python,multiple-inheritance,typechecking
来源: https://codeday.me/bug/20191001/1838246.html