- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,我有一段代码如下:
from typing import Type, TypeVar, cast
class SuperClass:
pass
T = TypeVar('T', bound=SuperClass)
def cast_to(obj: SuperClass, cast_to: Type[T] = SuperClass) -> T:
return cast(cast_to, obj)
我将其保存在type_check.py
中。如果我在上面运行 mypy,我会收到以下错误消息:
type_check.py:10: error: Incompatible default for argument "cast_to" (default has type "Type[SuperClass]", argument has type "Type[T]")
type_check.py:11: error: Invalid type "cast_to"
根据我对TypeVar
中bound
的理解,只要T
是SuperClass
的子类,应该没问题。但是为什么 mypy 会在这里抛出错误呢?谢谢!
最佳答案
您的代码有两个问题:首先,您的 cast_to
函数的签名应该是:
def cast_to(obj: SuperClass, cast_to: Type[T] = Type[SuperClass]) -> T:
然后,在您的 cast
语句中,我不确定 mypy
是否允许您使用 cast_to
作为 的第一个参数> Actor
。相反,您可以尝试:
def cast_to(obj: SuperClass, cast_to: Type[T]) -> T:
return cast(T, obj)
当然,根据这一定义,您将无法仅使用一个参数来调用 cast_to
。
我现在要问:为什么你觉得你需要这样做?你确定你的设计很好吗? cast
应该在非常特殊的情况下使用;文档指出:
Casts are used to silence spurious type checker warnings and give the type checker a little help when it can’t quite understand what is going on.
所以你应该在这里认真质疑你的设计!请向我们提供更多有关您想要实现的目标的信息。也许有比您想要做的更好、更简洁的设计。
关于python - Mypy 似乎忽略了 TypeVar 类型的界限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54413538/
我试图在 for 循环中更新我的 for 循环的上限。 例子 numvar = 3 for i=2 To numvar Step 2 'code... numvar = numvar
给定f(x, y)和g(n): def f(x, y): if x < 1 or y < 1: return 1 return f(x - 1, y - 1) + f(
我是一名优秀的程序员,十分优秀!