博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10反射
阅读量:5256 次
发布时间:2019-06-14

本文共 1637 字,大约阅读时间需要 5 分钟。

#反射:通过字符串映射到对象的属性 class Peple:     def __init__(self,name,age):         self.name=name         self.age=age     def talk(self):         print('%s in talking' %self.name) obj=Peple('egon',18) # print(obj.name)   #本质 obj.__dict__['name'] # print(obj.talk) # print(Peple.__dict__)   #类的名称空间 # choice=input(">>: ")    #input所有输入都是一个str choice=str # print(obj.choice)       #这里调用obj的是一个方法  ,所以这样调用时不行的 #查存不存在 # print(hasattr(obj,'name'))  #obj.__dict__['name'] # print(hasattr(obj,'talk'))   #obj.talk #取到查询的值 # print(getattr(obj,'name',None)) # print(getattr(obj,'talk',None)) #增加属性 # setattr(obj,'sex','male') # print(obj.sex) #删除属性 # delattr(obj,'age') # print(obj.__dict__) #反射的应用 class Service:     def run(self):         while True:             cmd=input('>>: ').strip()             if hasattr(self,cmd):    #判断输入的字符串是否存在,存在就掉用                 func=getattr(self,cmd)                 func()     def get(self):         print('get......')     def put(self):         print('put......') obj=Service() obj.run() 总之反射的好处就是,可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用, 这其实是一种‘后期绑定’,什么意思?即你可以事先把主要的逻辑写好(只定义接口),然后后期再去实现接口的功能

好处一:实现可插拔机制

有俩程序员,一个lili,一个是egon,lili在写程序的时候需要用到egon所写的类,但是egon去跟女朋友度蜜月去了,

还没有完成他写的类,lili想到了反射,使用了反射机制lili可以继续完成自己的代码,

等egon度蜜月回来后再继续完成类的定义并且去实现lili想要的功能。

egon还没有实现全部功能

class FtpClient:    'ftp客户端,但是还么有实现具体的功能'    def __init__(self,addr):        print('正在连接服务器[%s]' %addr)        self.addr=addr

不影响lili的代码编写

#from module import FtpClientf1=FtpClient('192.168.1.1')if hasattr(f1,'get'):    func_get=getattr(f1,'get')    func_get()else:    print('---->不存在此方法')    print('处理其他的逻辑')

 

转载于:https://www.cnblogs.com/sunny666/p/9661733.html

你可能感兴趣的文章
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
三维变换概述
查看>>
第三次作业
查看>>
vue route 跳转
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。...
查看>>
Linux中防火墙centos
查看>>
mysql新建用户,用户授权,删除用户,修改密码
查看>>
FancyCoverFlow
查看>>
JS博客
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
ASP.NET WebApi 基于OAuth2.0实现Token签名认证
查看>>