Python基础入门:反射

反射的定义

根据字符串的形式去某个对象中操作成员

  • 根据字符串的形式去某个对象中寻找成员
  • 根据字符串的形式去某个对象中设置成员
  • 根据字符串的形式去某个对象中删除成员
  • 根据字符串的形式去某个对象中判断成员是否存在

反射相关函数

getattr(object,name,[default])

获取一个对象的属性或者方法,如果存在就打印出来,如果不存在就打印出默认值,默认值是可选的

注意:返回的对象方法,返回的是内存地址,如果需要执行这个方法,需要在后面加上括号’()’

>>> class test():
 ...     name="xiaohua"
 ...     def run(self):
 ...             return "HelloWord"
 ...

 >>> t=test()           #实例化这个类
 >>> getattr(t, "name") #获取name属性,存在就打印出来。
 'xiaohua'


 >>> getattr(t, "run")        #获取run方法,存在就打印出方法的内存地址。
<bound method test.run of <__main__.test instance at 0x0269C878>>

>>> func = getattr(t, "run")  #获取run方法,加个括号就可以执行这个方法
>>> func()
'HelloWord'


>>> getattr(t, "age")       #获取一个不存在的属性,就报错
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
AttributeError: test instance has no attribute 'age'
>>> getattr(t, "age","18")  #若属性不存在,返回一个默认值。
'18'

setattr(object,name,value)

给对象的属性赋值,若属性不存在,就先创建在赋值

>>> class test():
...     name="xiaohua"
...     def run(self):
...             return "HelloWord"
...
>>> t=test()
>>> hasattr(t, "age")   #判断属性是否存在
False
 
 >>> setattr(t, "age", "18")   #为属相赋值,并没有返回值
>>> hasattr(t, "age")    #属性存在了
True
>>>

delattr(object,name)

根据字符串的形式去某个对象中删除成员

>>> getattr(commons, "Name")
'ZhaiJunMing'
>>> delattr(commons, "Name")
# 获取不到就报错
>>> getattr(commons, "Name")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'commons' has no attribute 'Name'

hasattr(object,name)

根据字符串的形式去某个对象中判断成员是否存在

比如:判断一个对象里面是否有name属性或者name方法,返回bool值,有则True,否则False

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> class test():
...     name="xiaohua"
...     def run(self):
...             return "HelloWord"
...

>>> t=test()
>>> hasattr(t, "name") #判断对象有name属性
True
 
>>> hasattr(t, "run")  #判断对象有run方法
True
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值