目录
获取对象信息
type( )
• 获取基本类型
• 获取函数或实例的类型
• 判断对象是否为一个函数
isinstance( )
• 判断基本类型
• 判断实例的类型
• 判断变量是否为某一类型中的一种
• type( )与isinstance( )的区别
dir( )
getattr( )、setattr( )以及hasattr( )
获取对象信息
当我们拿到一个对象,想知道它的类型及相关信息时,可以用type( )、或isinstance( )、或dir( )。此外还能使用getattr( )、setattr( )以及hasattr( )对信息进行处理,下面将一一介绍。
type( )
--
type,即类型的意思。在Python中可之间使用type( )来获取对象的类型。
<font size=3>• 获取基本类型</font>
>>> type(111) <class 'int'> #111是int类型>>> type('aaa') <class 'str'> #aaa是str类型>>> type(None) <type(None) 'NoneType'> #None没有类型
注意到,type返回的是对应的class类型。
获取函数或实例的类型
>>> type(abs) <class 'builtin_function_or_method'> #abs是一个内置函数或方法>>>class Animal(object):... pass>>>a = Animal()>>> type(a) <__main__.Animal object at 0x0000000000638550> #a是Animal类型
判断对象是否为一个函数
>>> import types #加入types模块>>> def f():... pass...>>> type(f)==types.FunctionTypeTrue #f为函数类型>>> type(abs)==types.BuiltinFunctionTypeTrue #abs为内置函数>>> type(lambda x: x)==types.LambdaTypeTrue #lambda x: x是匿名函数>>> type((x for x in range(10)))==types.GeneratorType #x for x in range(10)) 是生成器类型True
isinstance( )
isinstance( )与type( )类似,是判断对象是否为一个已知的类型,以isinstance(对象,类型)的形式来判断。
• 判断基本类型
>>> isinstance('aaa', str)True>>> isinstance(111, int)True>>> isinstance(b'a', bytes)True
• 判断实例的类型
>>>class Animal(object):... pass>>>a = Animal()>>>isinstance(a, Animal) True
• 判断变量是否为某一类型中的一种
>>> isinstance([1, 2, 3], (list, tuple)) #判断是否为list或tupleTrue>>> isinstance((1, 2, 3), (list, tuple)) #判断是否为list或tupleTrue
• type( )与isinstance( )的区别
对于class的继承关系,type() 不会认为子类是一种父类类型,不考虑继承关系。而isinstance() 会认为子类是一种父类类型,考虑继承关系。
class A(object): passclass B(A): #B继承A类 passb = B() #b是B类的实例
type( )的判断:
>>>type(b) == B True>>>type(b) == A False
isinstance( )的判断:
>>>isinstance(b, B) True>>>isinstance(b, A) True
总是优先使用isinstance()判断类型,可以将指定类型及其子类“一网打尽”。 ——廖雪峰
dir( )
dir( )函数可以获取一个对象的所有属性和方法,返回的是一个包含字符串的list。比如我们返回的字符串'11'的信息:
>>>dir('11') ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
可见是有非常多的。类似__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。实际上,在用len( )函数时,是自动调用该对象内部的方法__len__( )方法,所以下面代码是等价的。
>>> len('11')2>>> '11'.__len__()2
getattr( )、setattr( )以及hasattr( )
能够获取对象信息是不够的,我们还要对对象信息进行相关的操作。
getattr( )函数可以获取对象的一个已知属性或方法;
setattr( )函数可以给对象设置一个属性,并给予相关数据;
hasattr( )函数可以判断对象是否有一个已知属性或方法。
结合着三个函数,我们可以在不知道对象信息的情况下对其信息进行操作。
>>>class A(object):... pass>>>a = A()>>>hasattr(a, 'name') #实例对象a有name属性吗False #没有>>>setattr(a, 'name', 'a') #给实例对象a设一个name属性,并赋予值a>>>hasattr(a, 'name') #实例对象a有name属性吗True #有>>>getattr(a, 'name') #获取实例对象a的name属性a
需要注意的是,这种操作方法只有在不知道对象信息的情况下才会去使用,如果已经知道对象信息,那么直接用a.name进行操作即可。
作者:三贝_
链接:https://www.jianshu.com/p/ff04a70e5b93
共同学习,写下你的评论
评论加载中...
作者其他优质文章