type()函数api
type()函数用于判断基本类型网络
type(123) #输出:<class 'int'> type('str') #输出:<class 'str'> type(None) #输出:<type(None) 'NoneType'> type(abs) #输出:<class 'builtin_function_or_method'>,若是一个变量指向函数,也可用type()判断 type(a) #输出:<class '__main__.Animal'>,若是一个变量指向类,也可用type()判断
type()函数返回对应的Class类型ssh
type(123)==type(456) #输出:True type(123)==int #输出:True type('abc')==type('123') #输出:True type('abc')==str #输出:True
使用types模块中定义的常量函数
import types type(methodName)==types.FunctionType #输出:True,使用types模块中定义的常量,判断对象是不是函数 type(abs)==types.BuiltinFunctionType #输出:True type(lambda x: x)==types.LambdaType #输出:True type((x for x in range(10)))==types.GeneratorType #输出:True
isinstance()函数ui
isinstance()判断的是一个对象是不是该类型自己,或者位于该类型的父继承链上spa
要优先使用isinstance()判断类型,这样可将指定类型及其子类"一网打尽"code
#继承关系是:object -> Animal -> Dog -> Husky a = Animal() d = Dog() h = Husky() isinstance(h, Husky) #输出:True isinstance(h, Dog) #输出:True isinstance(h, Animal) #输出:True isinstance(d, Dog) and isinstance(d, Animal) #输出:True
判断基本类型,能用type()判断的基本类型也能够用isinstance()判断对象
isinstance('a', str) #输出:True isinstance(123, int) #输出:True isinstance(b'a', bytes) #输出:True
判断一个变量是不是某些类型中的一种blog
isinstance([1, 2, 3], (list, tuple)) #输出:True isinstance((1, 2, 3), (list, tuple)) #输出:True
dir()函数继承
dir()函数得到一个对象的全部属性和方法,它返回一个包含字符串的list
得到一个str对象的全部属性和方法
dir('ABC') #输出:['__add__', '__class__',..., '__subclasshook__', 'capitalize', 'casefold',..., 'zfill']
getattr(),setattr()及hasattr()函数
有时仅仅把属性和方法列出来是不够的,需配合使用getattr()、setattr()以及hasattr()
hasattr():判断对象是否包含某属性或方法,访问对象某属性或方法时,若不肯定对象是否包含,要预先使用该函数进行判断,不然直接经过"对象.属性或方法"的方式会报错
getattr():获取对象某属性或方法,可以使用hasattr()预先判断对象是否包含
也可直接使用该函数获取,若是没有,则返回指定默认值,不然直接经过"对象.属性或方法"的方式会报错
setattr():给对象设置某属性或方法,并赋值
只有在不知道对象信息的时候,才会去获取对象信息,若是能够经过"对象.属性",就不要经过 getattr()方式获取属性值
假设但愿从文件流fp中读取图像,首先要判断该fp对象是否存在read方法
若是存在,则该对象是一个流,若是不存在,则没法读取,可经过hasattr()判断
请注意,在Python这类动态语言中,根据鸭子类型,有read()方法,不表明该fp对象就是一个文件流
它也多是网络流,也多是内存中的一个字节流
但只要read()方法返回的是有效的图像数据,就不影响读取图像的功能,如下是正确的方法例子:
def readImage(fp): if hasattr(fp, 'read'): return readData(fp) return None
使用示例
class MyObject(object): def __init__(self): self.x = 9 def power(self): return self.x * self.x obj = MyObject() hasattr(obj, 'x') #输出:True,判断对象obj是否有'x'属性 print(obj.x) #输出:9 hasattr(obj, 'y') #输出:False,判断对象obj是否有'y'属性 setattr(obj, 'y', 19) #为对象obj设置一个属性'y' hasattr(obj, 'y') #输出:True getattr(obj, 'y') #输出:19 print(obj.y) #输出:19 getattr(obj, 'z') #输出:报错,若是试图获取不存在的属性,会抛出AttributeError的错误,对象obj没有属性'z' getattr(obj, 'z', 404) #输出:404,能够传入一个default参数,若是属性不存在,就返回默认值,获取属性'z',若是不存在,返回默认值404 hasattr(obj, 'power') #输出:True,判断对象obj是否有'power'方法 getattr(obj, 'power') #输出:<bound method MyObject.power of <__main__.MyObject object at 0x10077a6a0>>,获取对象obj的'power'方法 fn = getattr(obj, 'power') #获取对象obj的'power'方法并赋值到变量fn fn #输出:<bound method MyObject.power of <__main__.MyObject object at 0x10077a6a0>>,fn指向obj.power fn() #输出:81