Python中dir,hasattr,getattr,setattr,vars的使用
Python中dir,hasattr,getattr,setattr,vars的使用
Python一切皆对象,对象都有很多属性和方法,使用时我们怎么知道对象有哪些属性,以及如何获取对象的属性和设置对象的属性呢?
Python提供了dir,hasattr,getattr,setattr,vars等函数,可以帮助我们操作和使用对象的属性。
一、dir([object])
dir函数的目的是交互式使用,因此没有提供完整的属性列表,只列出一组“重要的”属性名。
dir函数能审查有或没有 __dict__ 属性的对象。dir函数不会列出 __dict__ 属性本身,但会列出其中的键。dir函数也不会列出类
的几个特殊属性,例如 __mro__、__bases__ 和 __name__。
class Women(object):def __init__(self, name, age, height):self.name = nameself.age = ageself.height = heightdef shop(self):print("Go Shopping!")def photo(self):print('Photo self!')wo = Women('kitty', 18, 1.57)
print(dir(wo))
运行结果:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__','__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__', '__weakref__', 'age', 'height', 'name', 'photo', 'shop']
dir函数列出了我们自定义的类Women的大部分属性,其中有我们定义的name,age,height属性,shop,photo方法。
同时还有很多内置的方法,如:__getattribute__, __setattr__,方法分别是接下来我们要说的getattr(), setattr()函数的底层方法。
__delattr__是调用del删除属性时会调用的方法。
二、getattr(object, name[, default])
获取对象object的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。
从object对象中获取name字符串对应的属性。获取的属性可能来自对象所属的类或父类。如果没有指定的属性,getattr函数抛出
AttributeError异常,或者返回 default 参数的值(如果设定了这个参数的话)。
注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后面添加括号()。
print(getattr(wo, 'name'))
# print(getattr(wo, 'friend'))
print(getattr(wo, 'friend', 'me'))
shop = getattr(wo, 'shop')
shop()
运行结果:
kitty
me
Go Shopping!
接着使用上面定义的类,我们可以获取Women对象已有的属性和方法,如果获取没有的属性和方法,会报错。
如果是对象没有的属性,我们可以设置默认值,则getattr会返回这个默认值。
getattr获取对象的方法时,会返回一个方法对象,我们可以像执行函数一样执行这个方法。
三、setattr(object, name, value)
给对象的属性赋值,若属性不存在先创建再赋值,setattr返回值为None,设置成功后要通过getattr来获取属性。
把object对象指定属性的值设为value,前提是object对象能接受那个值。这个函数可能会创建一个新属性,或者覆盖现有的属性。
setattr(wo, 'height', 1.66)
print(getattr(wo, 'height'))
setattr(wo, 'home', 'sz')
print(getattr(wo, 'home'))
运行结果:
1.66
sz
继续使用上面的类,对象有height属性,setattr会将height的值修改。对象没有home属性,setattr会创建home属性再给home属性赋值。
四、hasattr(object, name)
判断一个对象里面是否有指定的属性或者方法,返回bool值,有指定属性(方法)返回True,否则返回 False
如果object对象中存在指定的属性,或者能以某种方式(例如继承)获取指定的属性,返回True。
这个函数的实现方法是调用getattr(object, name) 函数,看看是否抛出AttributeError异常。
print(hasattr(wo, 'name'))
print(hasattr(wo, 'shop'))
print(hasattr(wo, 'job'))
运行结果:
True
True
False
继续使用上面的类,对象有name属性,有shop方法,所以hasattr返回True,对象没有job属性也没有job方法,所以hasattr返回False。
五、vars([object])
返回object 对象的 __dict__ 属性,如果实例所属的类定义了__slots__ 属性,实例没有__dict__属性,那么 vars 函数不能处理这个实例(相反,dir函数能处理这样的实例)。如果没有指定参数,那么vars()函数的作用是返回表示本地作用域的字典。
print(vars(wo))
运行结果:
{'name': 'kitty', 'age': 18, 'height': 1.57}
继续使用上面的类,我们将setattr、getattr的代码注释掉,然后打印对象的vars函数,返回结果是本地作用域中定义的属性和属性值构成的字典。
也就是我们在本地定义的类的属性,如果通过setattr给对象添加属性,则vars中也会有添加的属性,返回的结果是属性名和属性值构成的字典。
Python中dir,hasattr,getattr,setattr,vars的使用相关推荐
- python hasattr_Python的hasattr(),getattr(),setattr()
1. hasattr(object, name) 判断object里是否有name属性,有就返回True,没有则返回False. class MyClass(object): name = 'jack ...
- python中setattr用法_详解Python的hasattr() getattr() setattr() 函数使用方法
hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...
- python getattr setattr_python hasattr/getattr/setattr介绍
摘要 Python 对应属性和方法的判断 hasattr/getattr/setattr hasattr 判断一个对象里面是否有name属性或者方法,返回值为Boolean值, 有name 返回tru ...
- Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 (一) hasattr(object,name) 函数 判断一个对象里面是否有 name 属性或者 name ...
- python中dir的使用_python中dir是什么意思
详细内容 python中dir是什么意思? python中dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__() ...
- python中dir的使用_python中dir函数如何使用?
python中,有很多的模块,有的时候搞不清或者记不住这些模块的用法,一个个检索会很麻烦,这时我们可以使用dir函数.dir函数是python中的内置函数,它可以用来列出模块定义的标识符如函数.类和变 ...
- Python中hasattr() getattr() setattr() 函数的使用
hasattr(object,name)函数: 判断一个对象里面是否有name属性或者name方法,返回bool值,有name属性(方法)返回True,否则返回False. class functio ...
- python中hasattr,getattr,setattr的区别
class meta:name = 'miao'password = '123456'def miao(self, i):return i + 1print(hasattr(meta, 'name') ...
- Python基础教程:hasattr() getattr() setattr() 使用方法详解
hasattr(object, name) 判断一个对象里面是否有name属性或者name方法,返回BOOL值,有name特性返回True, 否则返回False. 需要注意的是name要用括号括起来 ...
最新文章
- [原创]Bash中的$*和$@的区别
- numpy中的matrix与array的区别
- 最新猪肉价格走势分析,2021又会是一个吃不起猪肉的春节吗?
- 【自适应(盲)均衡1】LMMSE、Godard、CMA常模、Sato等算法在信道均衡中的应用理论与MATLAB仿真
- 《重大技术需求征集系统》项目目标文档
- IOS 在终端( Terminal )开发
- 【JSP教程】JSP期末考试复习要点大纲
- 史诗级互联网电商系统的演进过程详解
- plsql 导出分区_plsql批量导出数据库数据
- html利用浏览器打印jquery.jqprint-0.3.js,制作票据通用模板js
- java sqlldr_sqlldr使用(转)
- 蓝桥web模拟赛:时间管理大师
- Make sure that `gem install libv8 -v '3.16.14.3'` succeeds before bundling.
- 【转】MUD教程--巫师入门教程4
- 酷狗音乐PC端怎么使用听歌识曲功能?
- 解决selenium实例化时警告问题
- 用python为自己打造独一无二的logo
- 使用纯碎的HTML CSS制作多拉A梦(即为CSS画图)
- stroage——SAN存储与WINDOWS主机连接
- 小新700linux网卡驱动,小新Air14网卡驱动2024.0.2.101/12.0.0.725版下载,适用于Win10-64-驱动精灵...
热门文章
- Linux 汇编学习
- 分布式监控系统Zabbix3.2监控数据库的连接数
- 记一次转不过弯的递归
- 认清当下的努力,可能毫无意义
- 易宝典文章——玩转Office 365中的Exchange Online服务 之二十六 根据文本内容筛选群发邮件...
- ABBYY FineReader中的OCR选项怎样运用好
- [Js]淡入淡出的图片
- 内容主题windows下简单的vbscript自动发送邮件--带附件
- 一款JS+CSS实现的无缝平滑图片滚动代码
- Docker上部署FTP服务器(基于stilliard/pure-ftpd)