首页 > 编程 > Python > 正文

深入浅析Python获取对象信息的函数type()、isinstance()、dir()

2020-02-15 22:59:59
字体:
来源:转载
供稿:网友

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)))            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表