您的位置:首页 > 编程语言 > Python开发

Python学习系列之反射

2016-12-11 16:26 405 查看

反射的定义

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

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

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

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

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

反射相关函数

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)

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

1 >>> class test():
2 ...     name="xiaohua"
3 ...     def run(self):
4 ...             return "HelloWord"
5 ...
6 >>> t=test()
7 >>> hasattr(t, "age")   #判断属性是否存在
8 False

9 >>> setattr(t, "age", "18")   #为属相赋值,并没有返回值
10 >>> hasattr(t, "age")    #属性存在了
11 True
12 >>>


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

1 >>> class test():
2 ...     name="xiaohua"
3 ...     def run(self):
4 ...             return "HelloWord"
5 ...

6 >>> t=test()
7 >>> hasattr(t, "name") #判断对象有name属性
8 True

9 >>> hasattr(t, "run")  #判断对象有run方法
10 True
11 >>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: