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('处理其他逻辑')
  • 相关阅读:
    hdu 1669(二分+多重匹配)
    hdu 2389(最大匹配bfs版)
    hdu 3118(二进制枚举)
    计算机常用端口一览表
    自制EIGRP配置实验大全
    自制EIGRP配置实验大全
    《生成树选举口诀》【转载】
    CCNA基础知识摘录
    对eigrp默认网络的理解!
    对eigrp默认网络的理解!
  • 原文地址:https://www.cnblogs.com/shadowfolk/p/14660194.html
Copyright © 2011-2022 走看看