python中hasattr()、getattr()、setattr()函数的使用
作者:暮良文王 发布时间:2022-12-11 20:14:27
引言:
在阅读源码时,有很多简写的形式,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr()、getattr()、setattr()函数的使用也一并学习了一下。
正文:
1. hasattr(object, name)
判断object对象中是否存在name属性,当然对于python的对象而言,属性包含变量和方法;有则返回True,没有则返回False;需要注意的是name参数是string类型,所以不管是要判断变量还是方法,其名称都以字符串形式传参;getattr和setattr也同样;
>>>
>>> class A():
name = 'python'
def func(self):
return 'A()类的方法func()'
>>>
>>> hasattr(A, 'name')
True
>>>
>>> hasattr(A, 'age')
False
>>>
>>> hasattr(A, 'func')
True
>>>
2. getattr(object, name[, default])
获取object对象的属性的值,如果存在则返回属性值,如果不存在分为两种情况:
(1)没有default参数时,会直接报错;
(2)给定了default参数,若对象本身没有name属性,则会返回给定的default值;
如果给定的属性name是对象的方法,则返回的是函数对象,需要调用函数对象来获得函数的返回值;调用的话就是函数对象后面加括号,如func之于func();
另外还需要注意:
如果给定的方法func()是实例函数,则不能写getattr(A, 'func')(),
因为fun()是实例函数的话,是不能用A类对象来调用的,应该写成getattr(A(), 'func')();
实例函数和类函数的区别:
实例函数定义时,直接def func(self):,这样定义的函数只能是将类实例化后,用类的实例化对象来调用;
而类函数定义时,需要用@classmethod来装饰,函数默认的参数一般是cls,类函数可以通过类对象来直接调用,而不需要对类进行实例化;
>>>
>>> class A():
name = 'python'
def func(self):
return 'Hello world'
>>>
>>> getattr(A, 'name')
'python'
>>>
>>> getattr(A, 'age')# age变量不存在则报错
Traceback (most recent call last):
File "<pyshell#464>", line 1, in <module>
getattr(A, 'age')
AttributeError: class A has no attribute 'age'
>>>
>>> getattr(A, 'age', 20)
>>>
>>> getattr(A, 'func')
<unbound method A.func>
>>>
>>> getattr(A, 'func')()# func()函数不能被A类对象调用,所以报错, 需要用类的实例化对象来调用
Traceback (most recent call last):
File "<pyshell#470>", line 1, in <module>
getattr(A, 'func')()
TypeError: unbound method func() must be called with A instance as first argument (got nothing instead)
>>>
>>> getattr(A(), 'func')()
'Hello world'
>>>
>>> class A(object):
name = 'python'
@classmethod
def func(cls):
return 'the method of A object.'
>>>
>>> getattr(A, 'func')()
'the method of A object.'
>>>
3. setattr(object, name, value)
给object对象的name属性赋值value,如果对象原本存在给定的属性name,则setattr会更改属性的值为给定的value;如果对象原本不存在属性name,setattr会在对象中创建属性,并赋值为给定的value;
>>>
>>> class A():
name = 'python'
def func(self):
return 'Hello world'
>>>
>>> setattr(A, 'name', 'java')
>>> getattr(A, 'name')
'java'
>>>
>>> setattr(A, 'age', 20)
>>> getattr(A, 'age')
>>>一般先判断对象中是否存在某属性,如果存在则返回;如果不存在,则给对象增加属性并赋值:
>>>
>>> class A():
name = 'python'
def func(self):
return 'Hello world'
>>>
>>> if hasattr(A, 'age'):
print getattr(A, 'age')
else:
setattr(A, 'age', 20)
>>>
>>> getattr(A, 'age')
>>>
感受一下:
总结
以上所述是小编给大家介绍的python中hasattr()、getattr()、setattr()函数的使用,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/liangmingshen/archive/2019/08/16/11361947.html


猜你喜欢
- 如下所示:alist=[1,2]] >>>[1,2] alist.append([3,4]) >>>[1
- 安装tf2onnx以及onnxruntimepip install onnxruntimepip install tf2onnxtf 转为o
- 本文实例讲述了PHP抓取及分析网页的方法。分享给大家供大家参考,具体如下:抓取和分析一个文件是非常简单的事。这个教程将通过一个例子带领你一步
- 前言我们先说一下思路:先对目标网站发送请求,获取html源码,然后对源码里面的所以图片链接进行筛选,然后再次对图片链接发送请求,然后保存。思
- 内容摘要:本文介绍了通过获取访问者的IP地址来统计在线人数的方法,本文只是给出了实现统计在线人数的方法思路,具体代码的实现过程还得自己动手(
- 一、概述公司需要通过网页用户认证登录实现上网,网络设备判断当前帐号12小时没有没上网将会自动断开帐号上网,每天早上上班第一件事就是打开用户认
- 本文实例讲述了js省市联动效果。分享给大家供大家参考,具体如下:运行效果截图如下:具体代码如下:<html> <head&
- var YX = { //得到JS内置数据类型的类型,返回值包括[Date,RegExp,Number,String,Array,Boole
- 哪里出问题了python 中,使用 global 会将全局变量设为本函数可用。同时,在函数内部访问变量会先本地再全局。在嵌套函数中,使用 g
- asp时间加减运算 和转换问题 a=2007-07-24 2:23:15 b=2005-06-25 2:23:15 问题1 如何将a转换成2
- 现在的需求是:下拉框中要是选择加盟商让其继续选择学校,要是选择平台管理员则不需要选择学校。隐藏选择下拉列表。选择枚举值:/// <su
- 一、本讲学习目标1.掌握构造方法的使用2.掌握析构方法的使用3.掌握self变量的使用二、构造方法(一)概述构造方法指的是__init__(
- 一.基于纹理背景的图像分割该部分主要讲解基于图像纹理信息(颜色)、边界信息(反差)和背景信息的图像分割算法。在OpenCV中,GrabCut
- 1. 下载MySQL Community Server 5.6.35下载地址http://dev.mysql.com/downloads/m
- 和其他语言一样,JavaScript也有条件语句对流程上进行判断。包括各种操作符合逻辑语句比较操作符常用的比较操作符有
- 对于html中的一些元素注册事件的方式有多种 第一种: <script> function test() { alert(&qu
- mysql创建存储过程的官方语法为:START TRANSACTION | BEGIN [WORK]COMMIT [WORK] [AND [
- 前言Python中的 True和 False总是让人困惑,一不小心就会用错,本文总结了三个易错点,分别是逻辑取反、if条件式和pandas.
- 我们在前面的几节中分别讲了提高网站性能中内容、服务器、JavaScript和CSS等方面的内容。除此之外,图片和Coockie也是我们网站中
- pandas.DataFrame行名(index)和列名(columns)的修改方法如下。rename()任意的行名(index)和列名(c