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

反射共有四种方法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. java小知识点简单回顾

    1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...

  2. SpringMVC工作原理1(基础机制)

    图1.基本原理图 Spring工作流程描述       1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获:       2. Dispat ...

  3. discuz回贴通知插件实现-配置邮件服务器

    添加smtp服务器,填写相应的smtp服务器,发信人地址,用户名和密码.   填写发件人地址和收件人地址来测试邮件是否发送成功.

  4. SSH三大框架的关系、使用到的jar包、配置文件图解

  5. Spring基于AspectJ的AOP的开发之AOP的相关术语

    1. Joinpoint(连接点) -- 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点(任何一个方法都可以称为连接点) 2. Pointc ...

  6. 为什么二代测序的原始数据中会出现Read重复现象?

    为什么二代测序的原始数据中会出现Read重复现象? 要搞清楚这个read重复(duplicate)的问题,我想我们需要从NGS数据的产出过程说起,具体来说如下: 基因组DNA提取: DNA随机打断,最 ...

  7. p3412 [POI2005]SKO-Knights

    传送门 分析 图1 我们假设我们现在有两个向量(2,3)和(4,2),将他们所能到达的点在几何画板上画出来,再将这些点用红线连起来,在将横坐标相同的点用蓝线连起来便能得到图1,就此我们可以发现可以用绿 ...

  8. linux下第一个C程序

    首先,用vi编辑器新建一个文件 $vi hi.c 输入以下的程序(怎么用vi不说了) #include <stdio.h> int main() { printf("hello. ...

  9. const变量指针赋值给非const类型的指针运行结果

    在c++可以定义一个const变量,然后把变量的值赋给一个非const指针,可以通过指针来改变const变量的值吗?下面的截图给出了答案

  10. linux安装mysql~~~mysql5.6.12

    Linux安装mysql服务器 准备: MySQL-client-5.6.12-1.rhel5.i386.rpm MySQL-server-5.6.12-1.rhel5.i386.rpm 首先检查环境 ...