首页 > 其他 > 详细

py 中反射的基本应用和总结

时间:2020-08-15 23:08:37      阅读:82      评论:0      收藏:0      [点我收藏+]
#反射: 程序可以访问、检查和修改它本身的状态的行为的一种能力
#python中在面向对象中的反射:通过字符串的形式操作对象相关属性,通过字符串让对象自检是否有字符串表示的属性。
#python当中 反射提供的方法:hasattr/getattr/setattr/delattr

1、hasattr:根据字符串的形式去某个模块判断是否存在某对象
hasattr(obj, ‘string‘) 让obj自省自检有没有和string名符合的属性,有返回True,没有返回False。

2、getattr:根据字符串的形式去某个模块当中寻找某对象
getattr(obj, ‘string‘, None) 返回obj和string名相同的绑定方法。可以用来让一个变量引用这个返回结果,后面就可以call这个变量
,相当于call对象的绑定方法.如果没有,返回None,没有第三个参数则抛出异常

3、setattr:根据字符串的形式去某个模块当中设置某对象
setattr(obj, ‘string‘, val) obj设置一个和string同名的的属性,并赋值为val。

4、delattr:根据字符串的形式去某个模块当中删除某对象
delattr(obj, ‘string‘) 删除obj对象的‘string’的同名的属性。



哪些对象可以使用反射:
python中一切都是对象,都可以使用反射来进行自检
1、类可以对类的共有属性,方法(绑定方法,非绑定方法)进行反射
2、模块也可以进行反射。如:判定导入的模块是否有某个方法,有就调用。
--->实际上,反射在java当中是很强大的东西,但是在python当中也可以使用,比如在一些关键字驱动的框架里面,就会有反射相关的应用

例:=====================
class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def speak(self):
        print(%s is speaking % self.name)

obj = People(qika, 18)
f = input(qika:).strip()   #strip()清除格式

if hasattr(obj, f):   #hasattr  判断是否存在obj,f两个变量
    getattr(obj, f)()
    func1 = getattr(obj, f)
    func1()
else:
    print(名字:{} 说:{}.format(obj.name, f))

例:================================

#对象应用反射
class Foo:
    def __init__(self):
        self.name = qika
        self.age = 18
    def func(self):
        print(hello)
f = Foo()
setattr(f,sex,)   #设置一个属性("sex","男")
print(f.sex)   #打印一下里面的这个属性。其中的f是自己定义的变量,用来接收Foo()类实例化;然后直接调用属性:f.sex
delattr(f,"sex")  #同上,这里进行“删除一个属性”

hasattr(f,name)  #同上,判断name属性是否存在
if hasattr(f,func):  #连着一起使用:判断是否存在
     getattr(f,func)()    #查找f(即Foo类实例化的接收的变量名)内这个func这个属性方法
else:
    print(没找到)

例:=================================

#类中的反射

class Foo:
    f = 123
    @classmethod
    def class_method_dome(cls):
        print(class_method_dome)

     @staticmethod
    def static_method_dome():
        print(static_method_dome)


print(hasattr(Foo,class_method_dome))
method = getattr(Foo,class_method_dome)
method()
print(------------)
print(hasattr(Foo,static_method_dome))
method1 = getattr(Foo,static_method_dome)
method1()

 




py 中反射的基本应用和总结

原文:https://www.cnblogs.com/QiKa/p/13510515.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!