天天看点

【笔记】python获取对象信息type()isinstance()dir()

拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法?

目录

type()

isinstance()

dir()

type()

type()函数返回对应的Class类型。判断一个对象是否是函数用types模块中的各种类型作对比。

>>> import types
>>> def fn():
...     pass
...
>>> type(fn)==types.FunctionType
True
>>> type(abs)==types.BuiltinFunctionType
True
>>> type(lambda x: x)==types.LambdaType
True
>>> type((x for x in range(10)))==types.GeneratorType
True
           

isinstance()

要判断class的类型,可以使用

isinstance()

函数。

isinstance()

判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。

如这里Student是Person的子类:

person1 = Person('liwei',22,164)
stu1 = Student('forest',23,165)

print(isinstance(stu1,Student))
print(isinstance(stu1,Person))
print(isinstance(person1,Student))
print(isinstance(person1,Person))
           
【笔记】python获取对象信息type()isinstance()dir()

可以看到stu1既是Student类,又是Person类;person1只是Person类,不是Student类

还可以判断一个变量是否是某些类型中的一种:

person1 = Person('liwei',22,164)
stu1 = Student('forest',23,165)

print(isinstance(stu1, (Person, Student)))
print(isinstance(stu1, (int, str)))
           
【笔记】python获取对象信息type()isinstance()dir()

dir()

通过内置的一系列函数,我们可以对任意一个Python对象进行剖析,拿到其内部的数据。

要获得一个对象的所有属性和方法,可以使用

dir()

函数,它返回一个包含字符串的list,包含了该对象的所有属性和方法。

>>> dir('ABC')
['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
           

类似

__xxx__

的属性和方法在Python中都是有特殊用途的,比如

__len__

方法返回长度。在Python中,如果你调用

len()

函数试图获取一个对象的长度,实际上,在

len()

函数内部,它自动去调用该对象的

__len__()

方法。

getattr()

setattr()

以及

hasattr()

,我们可以直接操作一个对象的状态。

hasattr(obj,'a')       判断obj对象是否有属性/方法a  (注意,不能判断出私有属性/方法)

getattr(obj,'a')        获取obj对象的属性/方法a的值(如果获取一个不存在的属性/方法,会返回一个错误AttributeError。为避免出错导致程序停止,可以传入一个default参数 getattr(obj, 'a', 404),如果属性/方法a不存在,就返回默认值404)

setattr(obj,'a',100) 设置obj对象的属性/方法a的值

如下,person1对象的属性主要有 'high',方法主要有'print_name', 'print_age',运行结果入下

【笔记】python获取对象信息type()isinstance()dir()