判断对象类型,使用type()函数
判断一个对象是否是函数
使用types模块中定义的常量:
>>> import types
>>> type(abs)==types.BuiltinFunctionType
True
>>> type(lambda x: x)==types.LambdaType
True
>>> type((x for x in range(10)))==types.GeneratorType
True
对于class的继承关系
判断class的类型,可以使用isinstance()函数。
继承关系:
object -> Animal -> Dog -> Husky
>>> h = Husky()
然后,判断:
>>> isinstance(h, Husky)
True
>>> isinstance(h, Dog)
True
h虽然自身是Husky类型,但由于Husky是从Dog继承下来的,所以,h也还是Dog类型
基本类型也可以用isinstance()判断:
>>> isinstance('a', str)
True
>>> isinstance(123, int)
True
判断一个变量是否是某些类型中的一种
>>> isinstance([1, 2, 3], (list, tuple))
True
获得一个对象的所有属性和方法,可以使用dir()函数
调用len()函数试图获取一个对象的长度,
实际上,在len()函数内部,它自动去调用该对象的__len__()方法
下面的代码是等价的:
>>> len('ABC')
3
>>> 'ABC'.__len__()
3
测试对象的属性:
>>> class MyObject(object):
... def __init__(self):
... self.x = 9
... def power(self):
... return self.x * self.x
...
>>> obj = MyObject()
>>> hasattr(obj, 'x') # 对象obj有属性'x'吗?
True
>>> obj.x
9
>>> hasattr(obj, 'y') # 有属性'y'吗?
False
>>> setattr(obj, 'y', 19) # 设置一个属性'y'
>>> hasattr(obj, 'y') # 有属性'y'吗?
True
>>> getattr(obj, 'y') # 获取属性'y'
19
>>> obj.y # 获取属性'y'
19
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404
例
假设希望从文件流fp中读取图像,首先要判断该fp对象是否存在read方法,
如果存在,则该对象是一个流,如果不存在,则无法读取
def readImage(fp):
if hasattr(fp, 'read'):
return readData(fp)
return None