Python3------反射详解
反射: 根据字符串动态的判断,调用,添加/修改,删除类或类的实例化对象中的方法或属性
反射共有四种方法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------反射详解的更多相关文章
- C#反射の反射详解
C#反射の反射详解(点击跳转)C#反射の反射接口(点击跳转)C#反射反射泛型接口(点击跳转)C#反射の一个泛型反射实现的网络请求框架(点击跳转) 一.什么是反射 反射(Reflection):这是.N ...
- java 反射详解
反射的概念和原理 类字节码文件是在硬盘上存储的,是一个个的.class文件.我们在new一个对象时,JVM会先把字节码文件的信息读出来放到内存中,第二次用时,就不用在加载了,而是直接使用之前缓存的这个 ...
- Java 反射详解 转载
java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...
- java反射 详解!!!!
java反射(特别通俗易懂) 反射是框架设计的灵魂 (使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一.反射的概述 JAVA反射机制是在运行状态 ...
- Python3语法详解
一.下载安装 1.1Python下载 Python官网:https://www.python.org/ 1.2Python安装 1.2.1 Linux 平台安装 以下为在Unix & Linu ...
- java反射详解
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
- java反射详解(转)
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...
- Java反射详解及应用示例
反射是Java中最重要的内容之一,了解反射原理对我们学习各种框架具有很大的帮助 反射的原理: 反射应用示例: import java.lang.reflect.Constructor; import ...
- 【转】java反射详解
转自:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的 ...
- .net反射详解(转)
摘自:http://www.cnblogs.com/knowledgesea/archive/2013/03/02/2935920.html 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在 ...
随机推荐
- Python3 pow() 函数
Python3 pow() 函数 Python3 数字 描述 pow() 方法返回 xy(x的y次方) 的值. 语法 以下是 math 模块 pow() 方法的语法: import math mat ...
- Chip Factory(01字典树)
Chip Factory http://acm.hdu.edu.cn/showproblem.php?pid=5536 Time Limit: 18000/9000 MS (Java/Others) ...
- Linux CentOS6.6 NFS服务的配置与安装
一.简介 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客 ...
- Spring框架的AOP的底层实现
1. Srping框架的AOP技术底层也是采用的代理技术,代理的方式提供了两种 1. 基于JDK的动态代理 * 必须是面向接口的,只有实现了具体接口的类才能生成代理对象 2. 基于CGLIB动态代理 ...
- 【.Net姿势随记】const 与 readonly 初始化姿势
using System; class P { static readonly int A=B*10; static readonly int B=10; public ...
- mvc下ajax请求遇到session超时简单处理方式
转自:http://blog.csdn.net/yeyicsdn/article/details/50032787 参考网址:http://www.cnblogs.com/RachelChen/p/5 ...
- 11月11日光棍节考试总结hhh
好吧,第一题字符串裸栈就能A 第二题字典序没调完,先写的第一题和第三题暴力,第二题读题感觉自己不会写,其实也能写出来,浪费了好多时间 第三题DP大概是写的暴力,原本可以搞到20分,要交的时候发现自己少 ...
- HRegionServer异常下线问题
==版本== Hadoop:2.7.1 HBase:1.2.1 Zookeeper:3.4.6 ==现象== HBase集群启动一段时间之后,一部分HRegionServer会异常下线重启(用syst ...
- Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子
转自:http://www.blogjava.net/wangxinsh55/archive/2011/07/24/354925.html Jbpm4.4+hibernate3.5.4+sprin ...
- 前端之JavaScript笔记4
一 按键事件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...