码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习系列之反射

时间:2016-12-11 18:31:00      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:false   com   学习   stdin   tee   nbsp   color   函数   import   

反射的定义

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

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

反射相关函数

getattr(object,name,[default])

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

自定义一个模块(用来测试寻找这个模块里的某个成员)

# 自定义模块的内容
[root@CentOS ~]# cat commons.py 
#!/usr/bin/env python
Blog_Url = "www.cnblogs.com/zhaijunming5"
def f1():
    return "F1"
def f2():
    return "F2"

在commons模块里寻找某个成员

>>> import commons
>>> getattr(commons, "f1") <function f1 at 0x7fbce5774598> #表示找个这个成员了 >>> getattr(commons, "f1f1f1") Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: module commons has no attribute f1f1f1 #表示没找到这个成员,报错了

执行获取到的成员(函数)

>>> target_func = getattr(commons, "f1")

>>> target_func
<function f1 at 0x7fbce5774598>

>>> target_func() 
F1

通过设置默认值可以避免获取不到方法时报错

# 设置一个默认值为None
>>> target_func = getattr(commons, "f1f1f1", None)
>>> target_func
>>>

通过getattr获取模块中的全局变量

>>> import commons
>>> getattr(commons, "Blog_Url", None)
www.cnblogs.com/zhaijunming5

setattr(object,name,value)

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

设置全局变量

# 获取commons内的Name变量
>>> getattr(commons, "Name", None)
# 在commons模块中设置一个全局变量Name,值为Ansheng
>>> setattr(commons, "Name", "ZhaiJunMing")
# 获取commons内的Name变量
>>> getattr(commons, "Name", None)
ZhaiJunMing

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)

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

# 如果不存在就返回False
>>> hasattr(commons, "Name")
False
>>> setattr(commons, "Name", "ZhaiJunMing")
# 如果存在就返回True
>>> hasattr(commons, "Name")
True

 

Python学习系列之反射

标签:false   com   学习   stdin   tee   nbsp   color   函数   import   

原文地址:http://www.cnblogs.com/zhaijunming5/p/6159850.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!