Python学习系列之反射
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习系列之反射相关的知识,希望对你有一定的参考价值。
反射的定义
根据字符串的形式去某个对象中操作成员
- 根据字符串的形式去某个对象中寻找成员
- 根据字符串的形式去某个对象中设置成员
- 根据字符串的形式去某个对象中删除成员
- 根据字符串的形式去某个对象中判断成员是否存在
反射相关函数
getattr(object,name,[default])
根据字符串的形式去某个对象中寻找成员
自定义一个模块(用来测试寻找这个模块里的某个成员)
# 自定义模块的内容 [[email protected] ~]# 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学习系列之反射的主要内容,如果未能解决你的问题,请参考以下文章
《C#零基础入门之百识百例》(一百)反射详解 -- 检索特性