反射: 根据字符串动态的判断,调用,添加/修改,删除类或类的实例化对象中的方法或属性

反射共有四种方法hasattr(),getattr(),setattr(),delattr()

1.通过字符串来判断类里或类的实例化对象里有没有与字符串相同的属性或方法
hasattr(obj,str)---判断一个实例对象obj里是否有对应的str字符串的方法

2.如果有则可以直接调用类中或类的实例化对象中与字符串相同的属性或方法
getattr(obj,str)---根据字符串去获取obj对象里的对应的方法的内存地址,即可加"()"调用

3.如果没有则可以在类中或类的实例化对象中创建一个新的与字符串相同的属性或方法
若通过字符串判断类中或类的实例化对象中有与字符串相同的属性,则可以修改此属性的值
setattr(obj,str,value)---通过str字符串去设置obj对象里的属性的值value或添加与value相同的方法名的方法

4.如果有也可以通过字符串来动态的删除类中或类的实例化对象中的属性或方法
delattr(obj,str)---删除和字符串名字一致的属性或方法

 #定义一个类(学生类)
class student(object):
def __init__(self,name):
self.name = name;#定义一个属性(姓名) #定义一个方法(学习)
def study(self):
print('%s in the room study '%self.name) #实例化学生类
stuobj = student("shanghai") def fun(self):
print("%s play game-0-0-"%self.name) #输入一个字符串
str = input("输入的字符串str:")
#判断这个字符串是不是类中的属性或方法
if hasattr(stuobj,str): ''' #动态的调用一个方法
#若是则根据字符串去获取stuobj对象里的对应的方法的内存地址并赋值给func
func = getattr(stuobj,str)
#func调用
func()
#输入的字符串str:study
#输出结果:shanghai in the room study
''' ''' #动态的修改属性,把name属性修改成beijing
#若通过字符串判断类中或类的实例化对象中有与字符串相同的属性,则可以修改此属性并赋值
setattr(stuobj,str,"beijing")
print(getattr(stuobj,str))
#输入的字符串str:name
#输出结果beijing
''' ''' #动态的删除方法或属性
#如果有也可以通过字符串来动态的删除类中或类的实例化对象中的属性或方法
delattr(stuobj,str)
print(hasattr(stuobj,str))
#输入的字符串str:study
#输出结果:异常信息Traceback (most recent call last):---AttributeError: study (study错误)
''' else: ''' #动态的装配方法
#如果不是则可以在类中或类的实例化对象中创建一个新的与字符串相同的方法(动态的把方法装配到类中或类的实例化对象中)
setattr(stuobj,str,fun)
#用类的实例化对象来调用这个方法并传入这个实例化对象(因为要传入参数所以要传入实例对象)
stuobj.talk(stuobj)
#输入的字符串str:talk
#输出结果:shanghai play game-0-0-
''' ''' #动态的装配属性
#若通过字符串判断类中或类的实例化对象中没有与字符串相同的属性,则可以创建此属性并赋值
setattr(stuobj,str,22)
print(getattr(stuobj,str))
#输入的字符串str:age
#输出结果:22
'''

Python3------反射详解的更多相关文章

  1. C#反射の反射详解

    C#反射の反射详解(点击跳转)C#反射の反射接口(点击跳转)C#反射反射泛型接口(点击跳转)C#反射の一个泛型反射实现的网络请求框架(点击跳转) 一.什么是反射 反射(Reflection):这是.N ...

  2. java 反射详解

    反射的概念和原理 类字节码文件是在硬盘上存储的,是一个个的.class文件.我们在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个 ...

  3. Java 反射详解 转载

    java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...

  4. java反射 详解!!!!

    java反射(特别通俗易懂) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态 ...

  5. Python3语法详解

    一.下载安装 1.1Python下载 Python官网:https://www.python.org/ 1.2Python安装 1.2.1 Linux 平台安装 以下为在Unix & Linu ...

  6. java反射详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  7. java反射详解(转)

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...

  8. Java反射详解及应用示例

    反射是Java中最重要的内容之一,了解反射原理对我们学习各种框架具有很大的帮助 反射的原理: 反射应用示例: import java.lang.reflect.Constructor; import ...

  9. 【转】java反射详解

    转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...

  10. .net反射详解(转)

    摘自:http://www.cnblogs.com/knowledgesea/archive/2013/03/02/2935920.html 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在 ...

随机推荐

  1. LuoguP1032 字符变换(BFS)

    题目链接为:https://www.luogu.org/problemnew/show/P1032 思路:看到数据比较小,而且最多有6个规则,就可以用搜索去做了,我用的BFS,大体思路如下: 定义结构 ...

  2. np.random.seed()

    124.np.random.seed()的作用 陈容喜 关注 2018.01.11 21:36 字数 3 阅读 4460评论 0喜欢 6 今天看到一段代码时遇到了np.random.seed(),搞不 ...

  3. python进程之间修改数据[Manager]与进程池[Pool]

    #前面的队列Queue和管道Pipe都是仅仅能再进程之间传递数据,但是不能修改数据,今天我们学习的东西就可以在进程之间同时修改一份数据 #Mnager就可以实现 import multiprocess ...

  4. fiddler抓web请求

    原理 fiddler抓包原理 fiddler 调试器注册到操作系统因特网服务中,系统所有的网络请求都会走fiddler的代理,所以fiddler才能抓包. Debug traffic from any ...

  5. redhat配置java环境

    1.检查是否有旧版本的jdk java -version java version "1.4.2" gij (GNU libgcj) version (Red Hat -) Cop ...

  6. SNP问题大集锦

    SNP问题大集锦 [2017-01-19]       最近小编对基因检测很感兴趣,也跟风去测了一下,这一测不要紧,吓得小编几天没睡着觉,这不,检测报告上称小编的减肥能力弱,虽然小编一家都是胖子,唯有 ...

  7. 一篇文章Tornado快速入门

    Tornado是一个PythonWeb框架.一个异步网络库.通过使用非阻塞网络I/O,Tornado能够处理数以千计的连接,这意味着对于实时Web服务来说,Tornado是一个理想的Web框架. 作为 ...

  8. HTML <img> 标签的 alt 属性

    定义和用法 alt 属性是一个必需的属性,它规定在图像无法显示时的替代文本. 假设由于下列原因用户无法查看图像,alt 属性可以为图像提供替代的信息: 网速太慢 src 属性中的错误 浏览器禁用图像 ...

  9. 《Delphi XE6 android 编程入门教程》推荐

    近5.6年已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿 ...

  10. 服务器的日志一直报Packet for query is too large (7632997 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.的解决方法

    服务器的日志一直报Packet for query is too large (7632997 > 4194304). You can change this value on the serv ...