【问题标题】:Type hint for instance of subclass子类实例的类型提示
【发布时间】:2019-04-26 14:30:30
【问题描述】:

我想允许使用 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。

有什么帮助吗?

【问题讨论】:

  • Python 本身没有意见,我认为。这条消息是来自 mypy 还是其他什么?
  • @brunns 不,我正在使用enforce
  • @James 我认为这是另一种情况,在您引用的问题中,他们正在寻找接受子类的函数,我想改用实例。 A的子类的一个实例
  • 您能否更新问题,说是强制执行给您的信息?

标签: python class instance type-hinting


【解决方案1】:

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

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

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

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

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

欲了解更多信息,请参阅:https://github.com/RussBaz/enforce

【讨论】:

    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 2020-01-25
    • 2020-07-24
    • 2019-07-07
    • 2014-09-01
    • 2020-02-18
    • 2018-02-15
    • 2018-02-10
    相关资源
    最近更新 更多