子类实例的类型提示

时间:2019-04-26 14:30:30

标签: python class instance typing hint

我想允许使用Python 3进行类型提示,以接受作为给定类的子级的实例。我正在使用执行模块来检查函数的类型。例如:

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不允许这种语法,返回:

  

参数'x'的类型不是。实际类型是B。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

如文档中所述,还可以使用其他模式。

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