首页 > 解决方案 > python奇怪行为中的模板/通用用户定义类

问题描述

当我编写以下代码时,mypy 会发出一个错误(应该如此):

from typing import TypeVar, Generic, List
Data = TypeVar("Data")
class State(Generic[Data]):
    def __init__(self) -> None:
        self.d: Data = 8.9
s = State[int]()

-> None当我从ctor中删除(完全多余的,对吗?)部分时,会mypy 忽略类型不匹配。这是为什么?(请注意,这不是this的副本)

标签: pythontypesconstructormypy

解决方案


Mypy 只检查输入的函数。通过删除,-> None您使您的__init__无类型,因此 mypy 不会检查该功能。

mypy wiki 的常见问题部分对此进行了介绍:https ://mypy.readthedocs.io/en/stable/common_issues.html#no-errors-reported-for-obviously-wrong-code

为什么明显错误的代码没有被标记为错误有几个常见的原因。

包含错误的函数没有注释。没有任何注释的函数(既不针对任何参数也不针对返回类型)不会进行类型检查,即使是最明显的类型错误(例如2 + 'a')也会静默传递。解决方案是添加注释。在不可能的情况下,可以使用 . 检查没有注释的函数--check-untyped-defs


推荐阅读