输入子类的提示

问题描述 投票:0回答:1

我想允许使用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'不是<class'A'>类型。实际类型是B.

有帮助吗?

python class instance typing hint
1个回答
0
投票

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.