python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)

四个可以实现自省的函数

下列方法适用于类和对象(一切皆对象,类本身也是一个对象)

hasattr、getattr、setattr、delattr

class BlackMedium:feature='Ugly'def __init__(self,name,addr):self.name=nameself.addr=addrdef sell_house(self):print('%s 黑中介卖房子啦,傻逼才买呢,但是谁能证明自己不傻逼'%self.name)def rent_house(self):print('%s 黑中介租房子啦,傻逼才租呢'% self.name)b1=BlackMedium('万成置地','回龙观天露园')
#检测是否含有某属性
print(hasattr(b1,'name'))
print(hasattr(b1,'sell_house'))
#获取属性
n=getattr(b1,'name')
print(n)
func=getattr(b1,'rent_house')
func()# getattr(b1,'aaaaaaaa') #报错
#print(getattr(b1,'aaaaaaaa','不存在啊'))#设置属性
setattr(b1,'sb',True)
setattr(b1,'show_name',lambda self:self.name+'sb')
print(b1,'shou_name')
print(b1.__dict__)
print(b1.show_name(b1))。#删除属性
delattr(b1,'addr')
delattr(b1,'show_name')
delattr(b1,'show_name111')#不存在,则报错print(b1.__dict__)结果:
True
True
万成置地
万成置地 黑中介租房子啦,傻逼才租呢
<__main__.BlackMedium object at 0x7f47a9d83630> shou_name
{'name': '万成置地', 'addr': '回龙观天露园', 'sb': True, 'show_name': <function <lambda> at 0x7f47a9d79158>}
万成置地sb

为什么用反射之反射的好处

好处一:实现可插拔机制

有俩程序员,一个lili,一个是egon,lili在写程序的时候需要用到egon所写的类,但是egon去跟女朋友度蜜月去了,还没有完成他写的类,lili想到了反射,使用了反射机制lili可以继续完成自己的代码,等egon度蜜月回来后再继续完成类的定义并且去实现lili想要的功能。

总之反射的好处就是,可以事先定义好接口,接口只有在被完成后才会真正执行,这实现了即插即用,这其实是一种‘后期绑定’,什么意思?即你可以事先把主要的逻辑写好(只定义接口),然后后期再去实现接口的功能

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

#client.py

from ftp import FtpClient
f1=FtpClient('192.168.122.135')
if hasattr(f1,'get'):func=getattr(f1,'get')func()
else:print('---->不存在此方法')print('处理其他的逻辑')

转载于:https://www.cnblogs.com/charon2/p/10438134.html

day25 Python四个可以实现自省的函数,反射相关推荐

  1. python四个带 key 参数的函数(max、min、map、filter)

    四个带 key 参数的函数: max()点击查看详细 min()点击查看详细 map()点击查看详细 filter()点击查看详细 1)max(iterable, key) key:相当于对可迭代对象 ...

  2. 计算机程序中的自省程序(反射程序)(introspective program)是什么?(introspectable、introspection)

    introspect(反射)的概念由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省). 四个可以实现自省的函数 ① hasattr(object, ...

  3. 硬核!Python 四种变量的代码对象和反汇编分析

    作者 | 大奎 整理 | 阳哥 来源丨Python数据之道 在Python基础的学习过程中,对变量和参数的理解有助于我们从更基础层面了解Python语言的运行.在这个过程中,还是有不少冷门和细节的地方 ...

  4. python中long类型_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  5. python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  6. python excel 数据分析统计服_数据分析从入门到进阶(透彻讲解EXCEL.SQL.TABLEAU、PYTHON四项数据分析必会工具.免费提供1GB数据集...

    透彻讲解Excel.SQL.Tableau.Python四项数据分析必会工具,数据分析工作者的案头推荐工具书.系统介绍数据分析的策略.方法(数据分析之道):实例讲解引导.快速掌握数据分析工具(数据分析 ...

  7. 盏茶python(四) 控制流

    目录 1.条件测试 1.1 比较运算 1.2 逻辑运算 1.3 存在运算 2.分支结构 2.1 单分支 2.2 二分支 2.3 多分支 3.遍历循环 3.1 基本结构 3.2 循环控制 3.3 与el ...

  8. python能够接收由键盘输入的函数是_python实现键盘输入的实操方法

    python中有指定的代码进行输入操作,所以今天就由小编来为大家介绍python怎么实现键盘输入. 第一首先打开电脑的python编辑工具. 再创建python项目. 第二然后应用sys函数. 命令为 ...

  9. Python之列表表达式及高阶函数lamda、zip、enumerate、map和filter方法

    一.列表表达式[List Comprehension] 顾名思义,这个表达式作用是以一个快捷的方法对列表进行操作或运算,返回新的列表.其使用方式为[表达式 for 变量 in 列表] 或者 [表达式 ...

最新文章

  1. python执行linux命令返回结果_Python中调用Linux命令并获取返回值
  2. python元组转字典_python中怎么将元组、字典转化为列表
  3. 如何在Python中将字典键作为列表返回?
  4. python基础学习[python编程从入门到实践读书笔记(连载二)]:外星人入侵项目
  5. WEB服务在单点登录系统中的应用研究
  6. 天天象棋 残局闯关 第20关
  7. codeforces1453 D. Checkpoints
  8. 服务器系统server 2008,windows server 2008 R2 操作系统
  9. ASP.NET简化编辑界面 V2
  10. Network(无向图割点,tarjan)
  11. QueryDSL 大于、小于、大于等于、小于等于、等于、不等于方法
  12. 【操作系统】一起了解操作系统咯 | 原码,反码,补码,你理解到位了吗?
  13. 1602液晶显示简易计算器
  14. 开课吧-智能物联网训练营Day2-QT布局和植物与僵尸类构造
  15. 没想到,这个程序员只用了20行代码就拿了冠军
  16. Android拨号器的实现
  17. 你能猜出这些水果到底是啥吗?
  18. 树莓派更改python镜像源
  19. DSPE-PEG-Alginate,DSPE-PEG2000-Alginate,磷脂-聚乙二醇-海藻酸钠
  20. LwIP源码分析(2):tcpip_init和tcpip_thread函数分析

热门文章

  1. UA MATH571A 多元线性回归II 变量选择
  2. Bing地图REST服务
  3. Linux内核编译学习1
  4. 使用Win32汇编开发一个dll并在C#中调用
  5. Understand分析Kinect SDK 1.7自带例子(C++)图集二
  6. 图解用NetCat连接远程端口
  7. Typescript + TSLint + webpack 搭建 Typescript 的开发环境
  8. 选择加冒泡排序法与找鞍马之总结与感受
  9. CreateThread 和_beginthreadex区别
  10. 解决 wcf HTTP 无法注册 另一应用程序正在使用 TCP 端口 80