python之反射
2015-12-23 10:55
585 查看
什么是反射?
1、有时我们要访问某个变量或是方法时并不知道到底有没有这个变量或方法,所以就要做些判断。判断是否存在字符串对应的变量及方法。
2、我们知道访问变量时是不能加引号的,否则会被当成字符串处理。如果要通过字符串找到对应的变量,那该怎么办呢
反射就是用于解决上面两个问题而产生的,所谓反射,按我的理解就是反过来告诉我字符串是什么,是变量or方法
python中访问类或对象的成员有三种方法
##如下所示 obj 为对象 var为变量 func为函数
1、obj.var 或 obj.func()
2、obj.__dict__['var']
3、getattr(obj,'var')
反射有4个方法 getattr() hasattr() setattr() delattr()
举例子如下,一目了然
示例代码
#当某个字符串就是模块名时,我们导入模块时可以用以下方法导入
mymodule = __import__(var) #这个就相当于导入模块var.py了
导入后,你可以在你的代码中用mymodule.*来调用该模块下的任意方法
1、有时我们要访问某个变量或是方法时并不知道到底有没有这个变量或方法,所以就要做些判断。判断是否存在字符串对应的变量及方法。
2、我们知道访问变量时是不能加引号的,否则会被当成字符串处理。如果要通过字符串找到对应的变量,那该怎么办呢
反射就是用于解决上面两个问题而产生的,所谓反射,按我的理解就是反过来告诉我字符串是什么,是变量or方法
python中访问类或对象的成员有三种方法
##如下所示 obj 为对象 var为变量 func为函数
1、obj.var 或 obj.func()
2、obj.__dict__['var']
3、getattr(obj,'var')
反射有4个方法 getattr() hasattr() setattr() delattr()
举例子如下,一目了然
class A(object): gvar = 'min' def __init__(self,name,male): self.name = name self.male = male def func1(self): print "func1 :my name is %s" % self.name def func2(self): print "func2 :I'm a %s" % self.male ##实例化对象 obj = A('min','girl') hasattr(obj,'gvar') hasattr(obj,'func1') getattr(obj,'gvar') getattr(obj,'name') getattr(obj,'func1') getattr(obj,'func2')() setattr(obj,'gvar','ben') getattr(obj,'gvar') delattr(obj,'gvar') ##python中一切事物都是对象,故其实上面的obj也是可以是类名,模块名 getattr(A,'func2') hasattr(A,'func1')
示例代码
#当某个字符串就是模块名时,我们导入模块时可以用以下方法导入
mymodule = __import__(var) #这个就相当于导入模块var.py了
导入后,你可以在你的代码中用mymodule.*来调用该模块下的任意方法
>>> class A(object): ... gvar = 'min' ... def __init__(self,name,male): ... self.name = name ... self.male = male ... def func1(self): ... print "func1 :my name is %s" % self.name ... def func2(self): ... print "func2 :I'm a %s" % self.male ... >>> ##实例化对象 ... obj = A('min','girl') >>> hasattr(obj,'gvar') True >>> hasattr(obj,'func1') True >>> getattr(obj,'gvar') 'min' >>> getattr(obj,'name') 'min' >>> getattr(obj,'func1') <bound method A.func1 of <__main__.A object at 0x7f7b89f99a50>> >>> getattr(obj,'func2')() func2 :I'm a girl >>> setattr(obj,'gvar','ben') >>> getattr(obj,'gvar') 'ben' >>> delattr(obj,'gvar') >>> ##python中一切事物都是对象,故其实上面的obj也是可以是类名,模块名 ... getattr(A,'func2') <unbound method A.func2> >>> hasattr(A,'func1') True
相关文章推荐
- python文件操作
- 异步SocketServer服务器
- python获取window下网卡流量的函数
- 转载——最近百度云盘不提供搜索,闲来无事,玩玩python爬虫,爬一下百度云盘的资源
- Python操作符重载总结&列表模型
- Python中机器学习库scikit-learn的安装
- windows使用python调用wget批处理下载数据
- Python资源
- Python第三方库的安装方法
- Python游戏开发
- Python ID3 DecisionTree
- python 面向对象
- Python科学计算环境——Anaconda
- xgboost在Python的安装
- NLTK使用Stanford parser方法,可类推Stanford其他nlp工具
- 我的Python---1
- 学习《Python核心编程》做一下知识点提要,方便复习(二)
- Python基础10 反过头来看看
- Python基础09 面向对象的进一步拓展
- Python基础08 面向对象的基本概念