zoukankan      html  css  js  c++  java
  • 反射

    反射:通过字符串映射到对象的属性

    反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员下面逐一介绍先看例子:

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def talk(self):
            print('%s is talking' % self.name)
    
    
    obj = People('alex', 18)
    
    # print(obj.name)  # ==obj.__dict__['name']
    # print(obj.talk())
    print(hasattr(obj, 'talk'))  # hasattr就是用来判定给出的对象中有没有这个属性,有则返回True,反之返回False
    print(getattr(obj, 'name', None))  # getattr(o,name,default)参数o:给定的对象。参数name:是要获取的属性。参数default:是发生问题是给出结局方案
    #  当default = None时,如果要获取的属性不存在。该命令并不会报错
    setattr(obj, 'name', 'wang') #obj.name = 'wang'
    print(obj.name)
    delattr(obj, 'name')
    print(getattr(obj, 'name', None))

    结果:

    True
    alex
    wang
    None

    反射的使用:

    根据上面的程序稍作修改

    class People:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def run(self):
            while True:
                inp = input('>>>:').strip() #cmd='talk 1.txt
                cmd=inp.split()[0]
                if hasattr(self, cmd):
                    func = getattr(self, cmd)
                    func()
    
        def talk(self):
            print('%s is talking' % self.name)
    
    
    obj = People('alex', 18)
    obj.run()

    结果:

    >>>:talk
    alex is talking
    >>>:

    总结分析:可以看出,输入命令后。hasattr判断talk是否存在,如果存在就执行getattr结果返回func,接着运行func()其实就是运行的talk()。

  • 相关阅读:
    python requests用法总结
    Linux统计某文件夹下文件的个数
    PM2使用及介绍
    如何区分USB 2.0 和USB 3.0插口
    npm突然找不到npm-cli.js的解决方法
    mRemoteNG
    js中几种实用的跨域方法原理详解
    Tornado异步阻塞解决方案
    [阅读笔记]EfficientDet
    iOS 保存视频AVAssetWriter
  • 原文地址:https://www.cnblogs.com/z18271397173/p/9134184.html
Copyright © 2011-2022 走看看