开笔了,就写一下,hasattr,getattr,setattr。
这三个函数是来判断对象里面是否有这个属性或者方法(方法也可以成为可调用的属性)
以前经常写过,写成xx.getattr.....记住是函数,直接命令顶头开始写。
In [23]: class Demo: ...: def __init__(self): ...: self.name = 'sidian' ...: def out_name(self): ...: return self.name ...: In [24]: In [24]: dd = Demo() In [25]: hasattr(dd,'name') Out[25]: True In [26]: hasattr(dd,'out_name') Out[26]: True In [27]: hasattr(dd,'age') Out[27]: False
首先介绍hasatr,这个是判断对象是否有这个属性,返回的是Boll值,True或者False。
In [30]: getattr(dd, 'name') Out[30]: 'sidian' In [31]: getattr(dd, 'out_name') Out[31]: <bound method Demo.out_name of <__main__.Demo object at 0x10a4a9290>> In [32]: getattr(dd, 'out') --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-32-de58a5a0d8df> in <module> ----> 1 getattr(dd, 'out') In [35]: getattr(dd, 'out','ok') Out[35]: 'ok'
接下来测试的是getattr,这个名字虽然有get但脾气一点也不好,但他取不出对象里面的属性时,直接死给你看,所以可以添加第三个参数,但取不到输出第三个参数。
In [37]: setattr(bb,'age',18) In [38]: setattr(bb,'name','wangba') In [39]: getattr(bb,'age') Out[39]: 18 In [40]: getattr(bb,'name') Out[40]: 'wangba'
setattr可以向对象添加属性,还可以修改里面的属性,具体操作还是比较简单的。