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

反射共有四种方法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. 第六章 图(d)深度优先搜索

  2. focal

    focal 美 ['foʊk(ə)l]   英 ['fəʊk(ə)l]   adj.中心的:很重要的:焦点的:有焦点的 网络劲浪:在焦点上的:局部

  3. .NET中的文件IO操作实例

    1.写入文件代码: //1.1 生成文件名和设置文件物理路径 Random random = new Random(DateTime.Now.Millisecond); ); string Physi ...

  4. iOS - 组件化探究之私有库的创建

    http://www.cocoachina.com/ios/20180511/23359.html

  5. 零基础学习hadoop到上手工作线路指导(中级篇)

    此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...

  6. DataTable的序列化和反序列化

    /// <summary> /// DataTable序列化 /// </summary> /// <param name="dt"></ ...

  7. iOS.Dev.Guru

    1. Ricardo Quesada Cocos2d https://github.com/ricardoquesada http://www.elance.com/s/rquesada/ 2. Je ...

  8. 11月11日光棍节考试总结hhh

    好吧,第一题字符串裸栈就能A 第二题字典序没调完,先写的第一题和第三题暴力,第二题读题感觉自己不会写,其实也能写出来,浪费了好多时间 第三题DP大概是写的暴力,原本可以搞到20分,要交的时候发现自己少 ...

  9. phpstrom+xdebug配置

    1.确认是否安装了xdebug 2.在php.ini文件中配置如下 [xdebug] zend_extension="D:\wamp\php-5.6.2-x64\ext\php_xdebug ...

  10. 动态加载页面 通过src

    <img src="a.jpg"> 通过js  改变 src 路径 如action  路径, 注意 action 配置问题.