首页
学习
活动
专区
工具
TVP
发布

python反射

什么是反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。

python面向对象中的反射:

通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

四个可以实现自省的函数

下列方法适用于类和对象(一切皆对象,类本身也是一个对象)

(1)对象中是否存在属性与方法的判断

如果第二个只是属性,则返回属性值,如果是方法名,则返回方法的内存地址,如果第二个参数没有在对象中找到,程序崩溃

classA(object):

def__init__(self,name):

self.name=name

defrun(self):

return"Hello Word SB"

#判断obj是否有第二个参数

obj=A("xxx")

#如果第二个只是属性,则返回属性值,如果是方法名,则返回方法的内存地址,如果第二个参数没有在对象中找到,程序崩溃

# res = getattr(obj, "name") # xxx,返回属性值

res=getattr(obj,"run")#方法返回内存地址,>

print(res)

(2)检查对象中是否存在方法,找到返回true,否则放回false

classA(object):

def__init__(self,name):

self.name=name

defrun(self):

return"Hello Word SB"

obj=A("xxx")

res=hasattr(obj,"run")# True

print(res)

(3)对象属性的设置

classA(object):

def__init__(self,name):

self.name=name

defrun(self):

return"Hello Word SB"

a=A("虎妞")

print(a.name)#查看之前的name属性值,虎妞

setattr(a,"name","小白")#设置修改name属性值

print(a.name)#查看修改后的属性值 ,小白

#当设置的值不存在时,会自动添加到实例对象中

setattr(a,'age',16)

print(a.age)#16

(4)删除对象属性

classA(object):

def__init__(self,name):

self.name=name

defrun(self):

return"Hello Word SB"

#删除对象属性

a=A("大牛")

delattr(a,"name")

print(a.name)#程序挂了

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180929G1WXSH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券