这两个代码片段之间有什么区别?
使用类型:
import types
if type(a) is types.DictType:
do_something()
if type(b) in types.StringTypes:
do_something_else()
使用isinstance:
if isinstance(a, dict):
do_something()
if isinstance(b, str) or isinstance(b, unicode):
do_something_else()
下面是一个例子,isinstance实现了类型无法实现的功能:
class Vehicle:
pass
class Truck(Vehicle):
pass
在本例中,卡车对象是车辆,但您将看到:
isinstance(Vehicle(), Vehicle) # returns True
type(Vehicle()) == Vehicle # returns True
isinstance(Truck(), Vehicle) # returns True
type(Truck()) == Vehicle # returns False, and this probably won't be what you want.
换句话说,对于子类也是如此。
另请参阅:如何比较Python中对象的类型?
下面是一个例子,isinstance实现了类型无法实现的功能:
class Vehicle:
pass
class Truck(Vehicle):
pass
在本例中,卡车对象是车辆,但您将看到:
isinstance(Vehicle(), Vehicle) # returns True
type(Vehicle()) == Vehicle # returns True
isinstance(Truck(), Vehicle) # returns True
type(Truck()) == Vehicle # returns False, and this probably won't be what you want.
换句话说,对于子类也是如此。
另请参阅:如何比较Python中对象的类型?
type()和isinstance()之间的区别
type()->返回对象的类型
isinstance()->返回布尔值
一般来说,isinstance是一种“更”优雅的检查对象是否属于某种“类型”的方法(因为您知道继承链)。
另一方面,如果您不知道继承链,需要进行pick,请选择类型(x)==。。。
类型的另一个有趣的例子是检查bool
----Case bool----
print(type(True) == int) # False
print(type(False) == int) # False
print(type(True) == bool) # True
print(type(False) == bool) # True
print(isinstance(True, int)) # True
print(isinstance(True, int)) # True
----Case inheritance----
class A:
x=1
class B(A):
x=2
class C(B):
x=3
var1 = A()
var2 = B()
var3 = C()
print(type(var1)) # <class '__main__.A'>
print(type(var1) == A) # True
print(type(var2) == A) # False
print(type(var3) == A) # False
print(isinstance(var1, A)) # True
print(isinstance(var2, A)) # True
print(isinstance(var3, A)) # True
print(type(var2)) # <class '__main__.B'>
print(type(var1) == B) # False
print(type(var2) == B) # True
print(type(var3) == B) # False
print(isinstance(var1, B)) # False
print(isinstance(var2, B)) # True
print(isinstance(var3, B)) # True
print(type(var3)) # <class '__main__.C'>
print(type(var1) == C) # False
print(type(var2) == C) # False
print(type(var3) == C) # True
print(isinstance(var1, C)) # False
print(isinstance(var2, C)) # False
print(isinstance(var3, C)) # True