子类实例的类型提示

Type hint for instance of subclass

我想允许类型提示使用 Python 3 来接受给定 class 的子实例。我正在使用 enforce 模块来检查函数类型。例如:

import abc
class A(metaclass=abc.ABCMeta)
      pass
class B(A)
      def __init__(self,a)
      self.a = a
      pass
x = B(3)

@enforce.runtime_validation
def function(x:A)
     print(x.a)

但似乎 python 3 不允许使用此语法,返回:

Argument 'x' was not of type < class 'A' >. Actual type was B.

有什么帮助吗?

默认情况下强制应用不变类型检查。类型必须直接匹配 - 否则会抛出错误。

为了接受子类的实例,可以通过添加将模式更改为协变:

enforce.config({'mode ': 'covariant'})

在代码中执行任何类型检查之前执行的某个点(即接近开始)。

文档中描述的其他模式可用。

有关更多信息,请参阅:https://github.com/RussBaz/enforce