type()函数:
使用type()函数可以判断对象的类型,如果一个变量指向了函数或类,也可以用type判断。
如:
class Student(object): name = 'Student'a = Student()print(type(123))print(type('abc'))print(type(None))print(type(abs))print(type(a))
运行截图如下:
可以看到返回的是对象的类型。
我们可以在if语句中判断比较两个变量的type类型是否相同。
如:
class Student(object): name = 'Student'a = Student()if type(123) == type(456): print("True")
输出结果为True。
如果要判断一个对象是否是函数怎么办?
我们可以使用types模块中定义的常量。types模块中提供了四个常量types.FunctionType、types.BuiltinFunctionType、types.LambdaType、types.GeneratorType,分别代表函数、内建函数、匿名函数、生成器类型。
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()函数:
对于有继承关系的类,我们要判断该类的类型,可以使用isinstance()函数。
如:
class Animal(object): def run(self): print("动物在跑")class Dog(Animal): def eat(self): print("狗在吃")class Cat(Animal): def run(self): print("猫在跑")dog1 = Dog()cat1 = Cat()print(isinstance(dog1, Dog))print(isinstance(cat1, Cat))print(isinstance(cat1, Animal))print(isinstance(dog1, Animal))
运行截图如下:
可以看到子类的实例不仅是子类的类型,也是继承的父类的类型。
也就是说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。
能用type()判断的基本类型也可以用isinstance()判断,并且还可以判断一个变量是否是某些类型中的一种。
如:
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)))
新闻热点
疑难解答