Python反射操作对象属性方法详解
前言:
众所周知,每一个实例化对象都是有实例化属性或者方法的,之前我们对实例化对象进行属性方法查询、删除或者添加都是直接去通过对象名.属性 去操作的
所以今天我来讲其他方法去操作实例化对象的属性方法,看正文:
反射
在Python面对对象中,通过字符串的形式去操作对象的属性方法就称之为反射(在Python中一切事物都是可以为对象)
对象反射这里提供了以下几个内置字符串函数:
- getattr 获取指定对象的属性以及方法
- setattr 设置对象属性
- hasattr 判断对象是否有这个属性以及方法
- delattr 删除对象属性
下面进行一一细讲
1.getattr() 函数
格式:
变量名 = getattr(对象, 对象属性, 默认值)
作用:
获取指定对象的属性以及方法,然后返回这个属性或者方法
示例:
class A(object): def __init__(self,name): self.name=name def fun(self): print(f'我是{self.name}') user=A('Jack') print(user.name) #输出 Jack b=getattr(user,'name') a=getattr(user,'age',18) #注意注意!!! print(user.age)#报错的 c=getattr(user,'fun') print(b,a) c() print(user.__dict__) #输出结果: # Jack 18 # 我是Jack # {'name': 'Jack'}
注意看,这里我a=getattr(user,'age',18),其中age不是这个实例化对象的属性,只是我通过这个函数把18这个数字赋值给了c,实际上user和age并没有参与这个赋值,因为user与age一定关系都没有。下面通过__dict__就很明显看出来
2.setattr() 函数
格式:
setattr(对象, "对象属性", 值)
作用:
添加设置对象属性
示例:
#给对象添加属性 class A(object): def __init__(self,name): self.name=name def fun(self): print(f'我是{self.name}') user=A('Jack') #之前的做法:直接添加 user.age=18 print(user.age) #通过字符串操作 setattr(user,'num','137***55***') print(user.name,user.num) print(user.__dict__) #输出结果: # 18 # Jack 137***55*** # {'name': 'Jack', 'age': 18, 'num': '137***55***'}
3.hasattr() 函数
格式:
变量 = hasattr(对象, "对象属性")
作用:
判断对象是否有这个属性以及方法 ,返回布尔类型
示例:
class A(object): def __init__(self,name): self.name=name def fun(self): print(f'我是{self.name}') user=A('Jack') print(hasattr(user,'age')) #False print(hasattr(user,'name')) #True print(hasattr(user,'fun')) #True
4.delattr() 函数
格式:
delattr(对象, 对象属性)
作用:
删除对象属性或者方法
示例:
class A(object): def __init__(self,name,age): self.name=name self.age=age def fun(self): print(f'我是{self.name}') user=A('Jack',18)#{'name': 'Jack', 'age': 18} print(user.__dict__) delattr(user,'age') #等效于 del user.age print(user.__dict__)#{'name': 'Jack'}
可以看出,实例化对象user中的age属性被删除了
当然,这四个函数不单单可以在实例化对象使用,Python一切皆对象,所以一个模块,一个函数都是可以去使用的,这里就不多说了。
到此这篇关于Python反射操作对象属性方法详解的文章就介绍到这了,更多相关Python反射操作对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
分析Python编程时利用wxPython来支持多线程的方法
这篇文章主要介绍了Python编程时利用wxPython来支持多线程的方法,本文主要以开发GUI程序时做线程通讯作为一个示例来讲解,需要的朋友可以参考下2015-04-04Python hashlib模块与哈希算法保护数据完整性教程
hashlib模块为Python提供了一种简便的方式来使用各种哈希算法,如MD5、SHA-1、SHA-256等,哈希函数广泛用于密码学、数据完整性验证和安全存储等领域2024-01-01python+selenium+autoit实现文件上传功能
这篇文章主要介绍了python+selenium+autoit实现文件上传功能,需要的朋友可以参考下2017-08-08Python解析json之ValueError: Expecting property name enclosed in
这篇文章主要给大家介绍了关于Python解析json报错:ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)的解决方法,文中介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。2017-07-07
最新评论