【问题标题】:python typing module: Mixinpython输入模块:Mixin
【发布时间】:2017-07-04 18:58:15
【问题描述】:

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


    【解决方案1】:

    目前看来是不可能的。

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

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

    【讨论】:

    • 协议现在在 Python 3.8 中
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多