如何判断给定对象的类型?使用type()函数

判断基本数据类型可以直接写int,str。

函数类型、类类型
type()函数可以对括号内的对象判断,返回对应的Class类型。可以用于if语句的判断,能试的==两边值相同,则True,否则False。
模块types,用于判断一个对象是否是函数,如==types.FunctionType,==types.BuiltinFunctionType,==types.LambdaType,==types.GeneratorType.
判断Class的类型,包括继承的Class,可以使用isinstance()函数来判断。
如果存在object -> Animal -> Dog -> Husky这样的继承关系,a=Animal(),d=Dog(),h=Husky(),isinstance(h,Husky)和isinstance(h,Dog)的返回结果均是True。isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上,但例子中的d不是Husky类的。
能用type()判断的基本类型也可以用isinstance()判断。
isinstance可以判断一个变量是否是某些类型中的一种,如:isinstance([1,2,3], (list, tuple))
使用dir()函数,来获得一个对象的所有属性和方法,它返回一个包含字符串的list。
__XXX___的属性和方法在Python的特殊用途性,如果调用一个XXX()函数,实际上在XXX()函数内部,它自动去调用该对象的__XXX__()方法:

这表明在len()函数所属的类中是有__len__()方法的,如果自写类,也想用len(myObj)的话,就要在类内部写一个__len__()方法:

可见,以上例子是将同属于MyDog()这一类的所有类的__len__属性都设为了100。
'lower()返回小写的字符串,也是一种自动调用属性或方法的。
配合getattr()、setattr()、hasattr(),可以直接操作一个对象的状态,获得对象的属性、方法。
'hasattr(Myobject(),'x'),用于判断Myobject()这个类内是否有属性'x'
'Myobject().x,可直接调出这个类的x属性,可等同于getattr()
'getattr(Myobject(),'x'),获取'x'这个属性的内容
'setattr(Myobject(),'y',19),对于这个类中没有的属性'y',可以通过设置来使这个类有'y'这个属性
对于不存在的属性,可以通过getattr()设定一个404参数,指default。
获得对象的方法,结构同上。
只有在不知道对象信息的时候,才会通过getattr()去获取对象信息。如果可以直接调用,就不使用getattr()函数。
'read(),用于读取流(可以是文件流、网络流、字节流,只要返回的是有效数据即可)的方法,如果类中没有read(),则无法读取。
网友评论