Python进阶-----面向对象8.0(反射---对象属性方法操作)
创始人
2024-05-30 18:06:05
0

目录

前言:

反射

1.getattr() 函数

2.setattr() 函数

3.hasattr() 函数

4.delattr() 函数


前言:

        众所周知,每一个实例化对象都是有实例化属性或者方法的,之前我们对实例化对象进行属性方法查询、删除或者添加都是直接去通过对象名.属性 去操作的,所以今天我来讲其他方法去操作实例化对象的属性方法,看正文:

反射

在Python面对对象中,通过字符串的形式去操作对象的属性方法就称之为反射(在Python中一切事物都是可以为对象)

对象反射这里提供了以下几个内置字符串函数:

  • getattr 获取指定对象的属性以及方法

  • setattr 设置对象属性

  • hasattr 判断对象是否有这个属性以及方法

  • delattr 删除对象属性

下面进行一一细讲

1.getattr() 函数

 格式:

变量名 = getattr(对象, 对象属性, 默认值)

作用:

获取指定对象的属性以及方法,然后返回这个属性或者方法

示例:

class A(object):def __init__(self,name):self.name=namedef fun(self):print(f'我是{self.name}')
user=A('Jack')
print(user.name) #输出 Jackb=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=namedef 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=namedef 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=nameself.age=agedef 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一切皆对象,所以一个模块,一个函数都是可以去使用的,这里就不多说了。

        好了,这一期就到这里了,我们下一期再见!

分享一张壁纸:
 

相关内容

热门资讯

新城控股2025年上半年租金收... 7月9日,新城控股(601155)发布公告,2025年1-6月公司房地产出租情况显示,出租物业数量由...
康泰医学:两款产品获医疗器械注... 每经AI快讯,康泰医学7月9日公告,公司于近日取得了由河北省药品监督管理局颁发的两项医疗器械注册证,...
2025年京杭大运河全线贯通补... 转自:北京日报客户端新华社北京7月9日电记者9日从水利部获悉,2025年京杭大运河全线贯通补水任务于...
Gartner公布2025全球...   Hehson财经ESG评级中心提供包括资讯、报告、培训、咨询等在内的14项ESG服务,助力上市公...
“女子自曝孕期摆烂上班,老公是... 云南红河州“梦想红河”微信公众号消息,红河县联合调查组7月9日发布通报:近日,网传“红河县文旅局一员...
华盛锂电7月9日现1笔大宗交易...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   7月9日,华盛锂...
“转”出新活力 扬帆正当时——... 转自:新华社民营经济是推进中国式现代化的生力军,是高质量发展的重要基础。当前,越来越多的民营企业正通...
新城控股2025年上半年租金收... 7月9日,新城控股(601155)发布公告,2025年1-6月公司房地产出租情况显示,出租物业数量由...
*ST亚振:因控股股东、实际控... *ST亚振7月9日公告,因控股股东、实际控制人吴涛要约收购期满,需进一步确认要约收购结果,根据《上海...
隆基绿能7月9日现1笔大宗交易...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   7月9日,隆基绿...