例如在繼承上的區別:
- isinstance() 會認為子類是一種父類類型,考慮繼承關系。
- type() 不會認為子類是一種父類類型,不考慮繼承關系。
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
創建一個A對象,再創建一個繼承A對象的B對象,使用 isinstance() 和 type() 來比較 A() 和 A 時,由於它們的類型都是一樣的,所以都返回了 True。而B對象繼承於A對象,在使用isinstance()函數來比較 B() 和 A 時,由於考慮了繼承關系,所以返回了 True,使用 type() 函數來比較 B() 和 A 時,不會考慮 B() 繼承自哪里,所以返回了 False。
如果要判斷兩個類型是否相同,則推薦使用isinstance()。
