我想允许使用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.
有帮助吗?
默认情况下,enforce应用不变类型检查。类型必须直接匹配 - 否则会引发错误。
为了接受子类的实例,可以通过添加以下内容将模式更改为协变:
enforce.config({'mode ': 'covariant'})
在任何类型检查完成之前(即在开始附近)执行的代码中的某一点。
其他模式可用,如文档中所述。
有关更多信息,请参阅:https://github.com/RussBaz/enforce