【发布时间】:2015-12-23 17:20:15
【问题描述】:
我在 python3.5 中使用了新的类型提示/键入模块,试图找到一种方法来确认提示的类型是否等于变量的实际类型,并遇到了一些让我感到惊讶的事情。
>>> from typing import List
>>> someList = [1, 2, 3]
>>> isinstance(someList, List[str])
True
继续寻找将变量与其暗示类型进行比较的方法,我也尝试过:
>>> anotherList = ["foo", "bar"]
>>> type(anotherList) is List[str]
False
谁能解释为什么前者的计算结果准确为True?
接着往下说,有没有一种可靠的方法来检查变量的类型是否等于来自类型模块的类型?
【问题讨论】:
-
嗯,一方面,
type(x) is a和isinstance(x, a)绝对不是一回事。一个对象可以是多种类型的实例(具有继承层次结构),但type(x)只为您提供其最具体的单一类型。 -
是的,我在对其进行了一些测试后才知道这一点。仍然想将它包含在我的问题中,因为在询问有关 Python 中的类型比较的任何内容时,它通常被作为首选。
-
type(['foo', 'bar']) == List[str]的评估结果是什么? -
正如预期的那样,它的计算结果为
False,因为type(['foo', 'bar'])的计算结果为list
标签: python python-3.5