python输入模块:Mixin

时间:2017-07-04 18:58:15

标签: python multiple-inheritance typechecking

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 AB的实例,以及C的实例。这对f来说太过限制了(因为f不需要C),因此参数ab不一定是D类型1}}但Mixin[A, B]

如果typing模块没有提供任何选项,是否还有比创建自己的class AB(A, B)更优雅的内容?

2 个答案:

答案 0 :(得分:1)

我知道这是一篇过时的文章,但这可以帮助某人:

a = "Santol bag 85.88   www.example.com/products/16785
Shaddock    kg  2.94    www.example.com/products/4109
Palm Fig    5kg 94.34   www.example.com/products/23072
Litchee lb  95.85   www.example.com/products/2557"

a = a.split("\n")

linebreak = Proc.new { |text| text.split("\n") }
linebreak![a]

答案 1 :(得分:1)

现在看来不可能。

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

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