zoukankan      html  css  js  c++  java
  • python面向对象中反射

    反射的定义:

      用字符串数据类型的变量名来访问这个变量的值

    python面向对象中的反射,通过字符串的形式操作对象相关的属性.

    python中一切都是对象(都可以使用反射)

    反射的方法:

      getattr 获取属性

       hasattr  检测是否函数某属性

      setattr 设置属性

      delattr  删除属性

    class Foo:
        f = "类的静态变量"
        def __init__(self,name,age): # 初始方法
            self.name = name
            self.age =age
        def say_hi(self):  # 函数,方法
            print("hi,%s" %self.name)
    obj = Foo("zhao",18)
    
    #检测是否由某属性
    print(hasattr(obj,"name"))
    #检测obj这个对象里面有没有name这个属性
    print(hasattr(obj,"say_hi"))
    #检测obj这个对象里面有没有say_hi这个方法
    
    # 获取属性
    n = getattr(obj,"name")
    print(n)
    func = getattr(obj,'say_hi')
    func()
    
    # print(getattr(obj,"aaa"))  # 不存在这个属性或者方法的话,直接报错
    
    #设置属性
    setattr(obj,'sb',True)
    setattr(obj,"show_name",lambda self:self.name + "帅哥")
    print(obj.__dict__)
    print(obj.show_name(obj))
    
    #删除属性
    delattr(obj,"age")
    delattr(obj,"show_name")
    print(obj.__dict__)

    类也是对象:

    class Foo:
        staticField = 'old boy'
    
        def __init__(self):
            self.name = "zhaoyang"
        def func(self):
            return  "func"
        @staticmethod
        def bar():
            return 'bar'
    print(getattr(Foo,'staticField'))
    print(getattr(Foo,'func'))
    print(getattr(Foo,'bar'))

    反射当前模块成员

    import sys
    
    
    def s1():
        print 's1'
    
    
    def s2():
        print 's2'
    
    
    this_module = sys.modules[__name__]
    
    hasattr(this_module, 's1')
    getattr(this_module, 's2')

    导入其他模块,利用反射查找该模块是否存在某个方法

    def test():
        print('from the test')
    """
    程序目录:
        module_test.py
        index.py
     
    当前文件:
        index.py
    """
    
    import module_test as obj
    
    #obj.test()
    
    print(hasattr(obj,'test'))
    
    getattr(obj,'test')()

      

  • 相关阅读:
    jQuery的鼠标悬停时放大图片的效果
    判断一个字符串在另一个字符串中出现的次数
    .net中几个经常用到的字符串的截取
    云服务器 ECS CentOS 7 下重启 sshd 服务操作方法
    博客生涯开始咯
    Json 转 Map 的几种方式
    JS 折线图
    CSS样式优先级
    Arrays.asList 数组转集合 java.lang.UnsupportedOperationException错误
    Netty 笔记
  • 原文地址:https://www.cnblogs.com/zhaoyang110/p/9392954.html
Copyright © 2011-2022 走看看