栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

打字。任何对象?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

打字。任何对象?

是,有一点不同。尽管在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]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号