打字。任何对象?

打字。任何对象?,第1张

打字。任何对象

是,有一点不同。尽管在Python 3中,所有对象都是的实例(

object
包括
object
自身),但只有
Any
文档指出类型检查器应忽略返回值。

Any
类型文档字符串指出对象是类的子类
Any
,反之亦然:

>>> import typing>>> print(typing.Any.__doc__)Special type indicating an unconstrained type.    - Any object is an instance of Any.    - Any class is a subclass of Any.    - As a special case, Any and object are subclasses of each other.

然而,适当的typechecker(一个超越

isinstance()
检查,并且检查对象如何被实际 使用
中的功能)可以容易地反对
object
,其中
Any
总是接受。

Any
类型文档中:

请注意,将类型的值分配给

Any
更精确的类型时,不会执行任何类型检查。

将的行为

Any
与的行为进行对比
object
。类似于
Any
,每种类型都是的子类型
object
。但是,与
Any
相反,情况并非如此:object不是其他所有类型的子类型。

这意味着,当值

object
的类型为时,类型检查器将拒绝对其执行的几乎所有 *** 作,并将其分配给更专门类型的变量(或将其用作返回值)是类型错误。

从mypy文档部分 Any vs.
object

该类型

object
是另一种类型,可以将任意类型的实例作为值。与不同
Any
object
是普通的静态类型(类似于
Object
Java),并且对象值仅接受对所有类型均有效的 *** 作。

object
可以投给一个更具体的类型,而
Any
实际上意味着
任何事情都会发生 ,并从任何使用对象的类型检查脱离(即使你后来这样一个对象分配给一个名字 typechecked)。

通过接受

list
,您已经将函数绘制到一个没有类型的角落,归结为与相同
List[Any]
。类型检查器在 那里脱离
,返回值不再重要,但是由于您的函数接受包含
Any
对象的列表,因此
Any
此处将是正确的返回值。

为了正确地参与类型检查的代码,您需要将输入标记为

List[T]
(通用类型的容器),以使类型检查器能够关心返回值。在您的情况下,这是
T
因为您正在从列表中检索值。
T
从创建
TypeVar

from typing import TypeVar, ListT = TypeVar('T')def get_item(L: List[T], i: int) -> T:    return L[i]


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5648937.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存