type()函數(shù):
使用type()函數(shù)可以判斷對象的類型,如果一個(gè)變量指向了函數(shù)或類,也可以用type判斷。
如:
class Student(object): name = 'Student'a = Student()print(type(123))print(type('abc'))print(type(None))print(type(abs))print(type(a))
運(yùn)行截圖如下:
可以看到返回的是對象的類型。
我們可以在if語句中判斷比較兩個(gè)變量的type類型是否相同。
如:
class Student(object): name = 'Student'a = Student()if type(123) == type(456): print("True")
輸出結(jié)果為True。
如果要判斷一個(gè)對象是否是函數(shù)怎么辦?
我們可以使用types模塊中定義的常量。types模塊中提供了四個(gè)常量types.FunctionType、types.BuiltinFunctionType、types.LambdaType、types.GeneratorType,分別代表函數(shù)、內(nèi)建函數(shù)、匿名函數(shù)、生成器類型。
import typesdef fn(): passprint(type(fn) == types.FunctionType)print(type(abs) == types.BuiltinFunctionType)print(type(lambda x: x) == types.LambdaType)print(type((x for x in range(10))) == types.GeneratorType)
isinstance()函數(shù):
對于有繼承關(guān)系的類,我們要判斷該類的類型,可以使用isinstance()函數(shù)。
如:
class Animal(object): def run(self): print("動物在跑")class Dog(Animal): def eat(self): print("狗在吃")class Cat(Animal): def run(self): print("貓?jiān)谂?)dog1 = Dog()cat1 = Cat()print(isinstance(dog1, Dog))print(isinstance(cat1, Cat))print(isinstance(cat1, Animal))print(isinstance(dog1, Animal))
運(yùn)行截圖如下:
可以看到子類的實(shí)例不僅是子類的類型,也是繼承的父類的類型。
也就是說,isinstance()判斷的是一個(gè)對象是否是該類型本身,或者位于該類型的父繼承鏈上。
能用type()判斷的基本類型也可以用isinstance()判斷,并且還可以判斷一個(gè)變量是否是某些類型中的一種。
如:
print(isinstance('a', str))print(isinstance(123, int))print(isinstance(b'a', bytes))print(isinstance([1, 2, 3], (list, tuple)))print(isinstance((1, 2, 3), (list, tuple)))
|
新聞熱點(diǎn)
疑難解答
圖片精選