Python进阶之hasattr()、getattr()和setattr()函数的使用

来源:暮良文王 Python Web与Django开发

链接:python中hasattr()、getattr()、setattr()函数的使用 – 暮良文王 – 博客园 (http://cnblogs.com)


在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr()、getattr()、setattr()函数的使用也一并学习了一下。

1. hasattr(object, name)

判断object对象中是否存在name属性,当然对于python的对象而言,属性包含变量和方法;有则返回True,没有则返回False;需要注意的是name参数是string类型,所以不管是要判断变量还是方法,其名称都以字符串形式传参;getattr和setattr也同样;

2. getattr(object, name[, default])

获取object对象的属性的值,如果存在则返回属性值,如果不存在分为两种情况:

(1)没有default参数时,会直接报错;

(2)给定了default参数,若对象本身没有name属性,则会返回给定的default值;

如果给定的属性name是对象的方法,则返回的是函数对象,需要调用函数对象来获得函数的返回值;调用的话就是函数对象后面加括号,如func之于func();

另外还需要注意:

o 如果给定的方法func()是实例函数,则不能写getattr(A, 'func')(),因为fun()是实例函数的话,是不能用A类对象来调用的,应该写成getattr(A(), 'func')();

实例函数和类函数的区别:

o 实例函数定义时,直接def func(self):,这样定义的函数只能是将类实例化后,用类的实例化对象来调用;

o 而类函数定义时,需要用@classmethod来装饰,函数默认的参数一般是cls,类函数可以通过类对象来直接调用,而不需要对类进行实例化;

示例:

3. setattr(object, name, value)

给object对象的name属性赋值value。如果对象原本存在给定的属性name,则setattr会更改属性的值为给定的value;如果对象原本不存在属性name,setattr会在对象中创建属性,并赋值为给定的value。

一般先判断对象中是否存在某属性,如果存在则返回;如果不存在,则给对象增加属性并赋值:

实际案例感受一下:


发表回复

相关推荐

静压、动压、全压、余压,在装中央新风系统之前一定要搞清的概念

在安装新风机的时候,有朋友经常在参数指标栏中看到“机外静压**Pa”,但你知道这机外静压指的是什么吗?机外静压、动压和新风 ...

· 43秒前

書籍的本質到底是什麼?我們為什麼要讀書?

書籍是用文字、圖畫和其他符號,在一定材料上記錄各種知識,清楚地表達思想,並且制裝成卷冊的著作物,為傳播各種知識和思想...

· 13分钟前

防雾眼镜布是智商税吗?哪种防雾眼镜布是真的有用?

冬天到了!又到了起雾的季节! 口罩+眼镜=一秒起雾! 于是眼镜党们的疑惑又来了:如何戴口罩眼镜不起雾? 往年我也有这样烦 ...

· 15分钟前

如何與命運抗爭?

文|袁運錄這是千千萬萬抑鬱癥患者面臨的同樣問題。你為什麼抑鬱?因為你在命運面前被打趴瞭下來,因為你鬥不過命運,所以你才...

· 15分钟前

那些恐龍時代的巨人

一說起恐龍時代的巨人,大傢會不約而同想到一個名字那就是蜥腳類,但是蜥腳類恐龍傢族不全是大個子,也有袖珍版成員。馬紮爾...

· 15分钟前