zoukankan      html  css  js  c++  java
  • 反射

    #反射
    #反射主要指程序可以访问、检测和修改它本身状态或行为的一种能力(自省),主要的逻辑写好(只定义接口)
    然后后期再实现接口功能。

    #hasattr(对象,属性名称) #判断对象能否调用属性(判断属性是否存在),能则返回True,否则返回False
    #getattr(对象,属性名称) #得到属性的值
    #setattr(x,y,v) #修改/新增属性 等价于 x.y=v ,x=对象,y=旧属性,v=新属性
    #delattr(x,y) #删除属性 等价于 x.y x=对象,y=属性

    #实例:
    class Reflect:
    x = '反射'
    def __init__(self,y,z):
    self.y = y
    self.z = z
    def fun(self):
    print('来自fun')
    def func(self):
    print('来自func')
    r1 = Reflect(1,2)
    print(hasattr(r1,'x')) #返回True
    print(hasattr(r1,'y')) #返回True
    print(hasattr(r1,'s')) #属性不存在,返回False
    print('------------hasattr--end-------------')
    #
    setattr(r1,'newx','新增的') #等价于x.y = v
    print(r1.__dict__) #{'y': 1, 'z': 2, 'newx': '新增的'}
    setattr(r1,'y',11) #修改y
    print(r1.__dict__) #{'y': 11, 'z': 2, 'newx': '新增的'}
    print('------------setattr--end--------------')
    #
    print(getattr(r1,'x')) #得到属性x=反射 等价于r1.x
    #
    delattr(r1,'newx') #删除属性newx ,等价于del r1.newx
    print(r1.__dict__) #{'y': 11, 'z': 2}
    print('----------delattr--end------------')

    #
    作用:可以实现定义接口,接口只有在被完成后才会真正执行,这实现了即插即用,即可以事先把
    class Ftp:
    #ftp客户端,但是还没有实现具体的功能
    def __init__(self,addr):
    print('正在连接服务器%s'%addr)
    self.addr = addr

    #反射的好处:不影响使用者的使用
    #from moudle rmport FtpClient
    f1 = Ftp('192.168.1.1')
    while hasattr(f1,'get'):
    func_get = getattr(f1,'get')
    func_get()
    else:
    print('不存在此方法')
    print('处理其他逻辑')
  • 相关阅读:
    TCP
    JAVA面向对象
    windows本地搭建easy-mock环境
    创建axios拦截器
    记录axios高效率并发的方法
    JS:数组中push对象,覆盖问题
    使用el-tree-transfer的方式
    从后台拿到echarts的数据值,求出百分比
    项目遇到的小问题(关于vue-cli中js点击事件不起作用和iconfont图片下载页面css样式乱的解答)
    JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)
  • 原文地址:https://www.cnblogs.com/shadowfolk/p/14660194.html
Copyright © 2011-2022 走看看