python - 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的副本)
解决方案
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
。
推荐阅读
- rust - 为什么此 FnMut 需要显式生命周期
- r - 无法更改 R utils::choose.dir() 中的默认目录
- flutter - 如何保存 WebView 的 cookie?(扑)
- android - 为什么在协调器布局的底部修复按钮在android中使用回收视图滚动
- reactjs - 在 React/Firebase 上更改用户的授权
- python - 如何修复我的音乐测验排行榜
- flutter - 构建颤振 apk
- python - 在 Python 中的函数内用作变量名一部分的参数
- ansible - Ansible - 动态目录结构创建
- java - 使用 Java 和 Apache POI 使用地图的结果填充 xlsx 文件的空单元格