什么是反射

光在两种物质分界面上改变传播方向又返回原来物质中的现象,叫反射!

以上,是反射的物理定义,与python中的反射概念,完全没有任何关系

书归正传:反射

就是通过字符串的形式,操作对象相关的属性

反射的相关函数:

hasattr(object,"name")
#返回bool类型,判断object的命名空间中是否存在name这个名字
#存在返回True
#不存在返回Flase
obj = getattr(object,"name")
#获得Object中名称为name的内存地址
#name可以是一个方法,也可以是一个属性
setattr(Object,"name","egon")
#在Object中添加一个name名字,并赋值egon
#在Object的__dict__中就可以看到{"name":"egon"}了
delattr(Object,"name")
#在Object中删除名称为name的内存地址

为什么要用反射,反射有什么优势

实现可插拔机制

例如:程序员A负责写模块,程序员B负责调用,当程序员A的模块没有完成,程序员B依然可以将代码完成,而且与程序员A的工作不相冲突

代码示例:

 # 编辑者:闫龙
class ftpc:
def __init__(self,x):
print("come no baby",x)
def getFile(self):
print("反正里面有文件")
def upFile(self):
print("你就当上传成功了一个叫FuckEgon的文件")

程序员A的未完成模块

 # 编辑者:闫龙
import FtpClient
class FtpS:
def __init__(self):
print("服务端已开启")
def Go(self):
ftpc = FtpClient.ftpc("egon")
while True:
userin = input(">>>:")
if(hasattr(ftpc,userin)):#在这里就是判断程序员A未完成的代码中是否存在某方法,如果存在则执行,不存在则提示指令错误
ftpp = getattr(ftpc,userin)
ftpp()
else:
print("指令错误")
continue f = FtpS()
f.Go()

程序员B的实现

动态导入模块

我们在导入模块的时候会用到Import 模块名,而这个模块名并不是一个字符串,那么使用应的好处就是可以对应字符串转成相应的模块

代码示例:

 #官方推荐版:egon坑货版
import importlib #导入一个improtlib模块
Choice = input(">>>")#获取用户输入的信息(模块名字)
importlib.import_module(Choice)#将用户输入的字符串变成模块的名字并导入模块 #矮根儿先入为主版:官方根本不推荐,但是如果你非要这么写的话,请在写之前注明:
#<林海峰教的>
Choice = input(">>>")#获取用户输入的信息(模块名字)
__import__(Choice)#将用户输入的字符串变成模块的名字并导入模块
#</林海峰教的>

Python概念-反射之文化底蕴版:反正射了的更多相关文章

  1. python的反射机制

    转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...

  2. 简单谈谈python的反射机制

    转:http://www.jb51.net/article/87479.htm 本文主要介绍python中的反射,以及该机制的简单应用,熟悉JAVA的程序员,一定经常和Class.forName打交道 ...

  3. 【转】简单谈谈python的反射机制

    [转]简单谈谈python的反射机制 对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面 ...

  4. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  5. 学习参考《Python基础教程(第3版)》中文PDF+英文PDF+源代码

    python基础教程ed3: 基础知识 列表和元组 字符串 字典 流程控制 抽象(参数 作用域 递归) 异常 魔术方法/特性/迭代器 模块/标准库 文件 GUI DB 网络编程 测试 扩展python ...

  6. Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘

    Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...

  7. Python基础教程(第3版)PDF高清完整版免费下载|百度云盘

    百度云盘:Python基础教程(第3版)PDF高清完整版免费下载 提取码:gkiy 内容简介 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基 ...

  8. Python学习手册(第4版)PDF高清完整版免费下载|百度云盘

    Python学习手册(第4版)PDF高清完整版免费下载|百度云盘 提取码:z6il 内容简介 Google和YouTube由于Python的高可适应性.易于维护以及适合于快速开发而采用它.如果你想要编 ...

  9. python的反射

    目前大多数网站都是通过路由的方法来,处理url请求,如果有很多个url的话,不停的include或者用if判断匹配,似乎不太符合情理,因此这里讲讲python的反射机制, 自动装在模块.请看下面的实例 ...

随机推荐

  1. windows 下升级安装mysql8,与旧版本5.6共存

    应开发需求,自mysql5.7开始引入json列类型和相关函数.为了提高数据读写的访问效率因此把数据库从mysql 5.6版升级到最新发行版 mysql 8.0.11 . 特此记录下多版本升级共存的过 ...

  2. SpannableString的基本用法

    原文地址:http://www.cnblogs.com/kross/p/3645594.html 以前一直好奇QQ的输入框里面是如何出现表情的,今天看了下这个,心中发出“原来是这样啊”的感叹. 通常情 ...

  3. Linux中Apache+Tomcat+JK实现负载均衡和群集的完整过程

    人原创,一个字一个字地码的,尊重版权,转载请注明出处! http://blog.csdn.net/chaijunkun/article/details/6987443 最近在开发的项目需要承受很高的并 ...

  4. mysql 查询缓存优化文章

    还不错 http://www.jzxue.com/shujuku/mysql/200910/20-2981.html

  5. BZOJ 3173 最长上升子序列(树状数组+二分+线段树)

    给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? 由于序列是顺序插入的,所以当前插入的数字对之 ...

  6. PGM学习之五 贝叶斯网络

    本文的主题是“贝叶斯网络”(Bayesian Network) 贝叶斯网络是一个典型的图模型,它对感兴趣变量(variables of interest)及变量之间的关系(relationships) ...

  7. 【BZOJ3293】分金币(贪心)

    [BZOJ3293]分金币(贪心) 题面 BZOJ 洛谷 题解 和上一题一样啊. #include<cstdio> #include<cmath> #include<al ...

  8. 【Learning】容斥原理

    PPT在这里 https://files.cnblogs.com/files/RogerDTZ/%E5%AE%B9%E6%96%A5%E5%8E%9F%E7%90%86.pdf

  9. WEB入门.五 页面设计简介

    学习内容 Ø        XHTML 的发展历程 Ø        XHTML 和 HTML 的区别 Ø        XHTML的DOCTYPE和基本标签 Ø        CSS 常用属性 能力 ...

  10. 观V8源码中的array.js,解析 Array.prototype.slice为什么能将类数组对象转为真正的数组?

    在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array o ...