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

Python之反射

时间:2019-05-21 11:06:23      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:func   引号   font   asa   mod   var   setattr   是什么   self   

什么是反射?

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 :Im 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之反射

标签:func   引号   font   asa   mod   var   setattr   是什么   self   

原文地址:https://www.cnblogs.com/-qing-/p/10898401.html

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