检查给定对象是否属于给定类型的最佳方法是什么?如何检查对象是否继承给定类型?
假设我有一个对象o.我如何检查它是否是一个str?
真的是一个语义问题.
直到最近,如果我不得不对结构进行任何类型检查,我会使用type(obj) is listet.人.然而,自从加入SO后,我注意到每个人(我的意思是每个人)都使用了isinstance(obj,list).它们似乎是同义词,并且timeit在它们之间显示出几乎相同的速度.
def a(): return type(list()) is list
def b(): return isinstance(list(),list)
from timeit import timeit
timeit(a)
# 0.5239454597495582
timeit(b)
# 0.5021292075273176
Run Code Online (Sandbox Code Playgroud)
事实上甚至dis同意他们是同义词,除了type is'sCOMPARE_OP
from dis import dis
dis(a)
# 2 0 LOAD_GLOBAL 0 (type)
# 3 LOAD_GLOBAL 1 (list)
# 6 CALL_FUNCTION 0 (0 positional, 0 keyword pair)
# 9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
# 12 LOAD_GLOBAL 1 (list)
# 15 …Run Code Online (Sandbox Code Playgroud)