初识python: 反射
反射:通过字符串映射或修改程序运行时的状态、属性、方法
反射有以下三个方法:
hasattr(object, name) 判断一个对象(object)里是否有对应的字符串(name)的属性
getattr(object, name) 根据字符串(name)去获取对象(object)里的,对应方法的内存地址(即,获取对应的方法)
setattr(object, name,value) 给对象(object)添加属性(name)值(value)
delattr(object,name) 删除对象的属性
实例:
def sleep(self):
print('%s在睡觉' % self.name) def talk():
print('说话') class People(object):
sex = '男'
def __init__(self, name):
self.name = name def eat(self):
print('%s正在吃东西' % self.name) p = People('simple') print(hasattr(p, 'eat')) # 返回True # 判断p这个对象中是否有eat这个属性。
print(hasattr(p, 'name')) # 返回True
f = getattr(p, 'eat') # 获取eat的内存地址,即,获取eat方法
print(f) # 打印eat的内存地址
print(f()) # 打印eat的返回值,即,执行eat方法 # 变量操作
str = input('变量:').strip()
val = input('变量的值:').strip()
if hasattr(p, str): # 在p中是否存在str变量,str是用户传入的参数。如果存在,则执行以下操作。
func = getattr(p, str) # 获取p中str变量
print('原来的变量:%s=%s'%(str,func))
setattr(p,func,val) # 修改p中str变量的值
f = getattr(p,func) # 重新获取p中str变量
print('修改后的变量:%s=%s'%(str,val)) # 打印str的值
else: # 在p中不存在str变量,执行以下操作。
setattr(p,str,val) # 给p添加变量str,并赋值val --> str = val
gv = getattr(p,str) # 获取p中新添加的str变量
print('新增了变量:%s=%s'%(str,gv)) # 打印新添加的str变量值
delattr(p, str) # 删除变量
print('删除了变量:%s' % str) # 删除p中str变量
print('是否还存在变量%s:%s'%(str,hasattr(p,str))) # 删除之后,再判断属性是否存在
变量操作
执行结果:

def sleep(self):
print('%s在睡觉' % self.name) def talk():
print('说话') class People(object):
sex = '男'
def __init__(self, name):
self.name = name def eat(self):
print('%s正在吃东西' % self.name) p = People('simple') print(hasattr(p, 'eat')) # 返回True # 判断p这个对象中是否有eat这个属性。
print(hasattr(p, 'name')) # 返回True
f = getattr(p, 'eat') # 获取eat的内存地址,即,获取eat方法
print(f) # 打印eat的内存地址
print(f()) # 打印eat的返回值,即,执行eat方法 # 方法操作
str = input('方法:').strip()
if hasattr(p, str): # 在p中是否存在str方法,str是用户传入的参数。如果存在,则执行以下操作。
func = getattr(p, str) # 获取p中str方法
print('方法%s执行结果:'%(str),end='')
func() # 执行方法
else: # 在p中不存在str方法,执行以下操作。
# setattr(p,str,sleep) # 给p添加了类方法sleep,带self参数
setattr(p,str,talk) # 给p添加方法talk,不带self参数 # sleep = getattr(p,str) # 获取p中新添加的str方法的内存地址
talk = getattr(p,str) print('新增了方法:%s,返回结果:'%str) # 打印新添加的str变量值 # sleep(p) # 类方法调用,带self
talk() # 普通方法调用,不带self delattr(p, str) # 删除方法
print('删除了方法:%s' % str) # 删除p中str变量
print('是否还存在变量%s:%s'%(str,hasattr(p,str))) # 删除之后,再判断属性是否存在
方法操作
执行结果:

初识python: 反射的更多相关文章
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- python 反射
python 反射的核心本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动! 反射的四个基本函数使用 hasattr,getattr,setatt ...
- Python开发【第一篇】:初识Python
初识python 一.python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...
- python反射
python反射 python的反射是基于字符串的形式去对象(模块)中操作其成员.此操作是动态的,常用于web开发中url参数中对应模块或者函数的反射. 下面开始具体说明: 场景需求: 我的pytho ...
- Python开发【第二篇】:初识Python
Python开发[第二篇]:初识Python Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏 ...
- 初识python面向对象
一.初识python面向对象: class Person: #使用class关键字定义一个类 age=0 #类变量(静态变量) def eat(self,food): #定义一个方法 self.age ...
- 篇2 安卓app自动化测试-初识python调用appium
篇2 安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...
- 2017-06-22初识python
初识python #!/usr/bin/env python (python解释器的文件路径)# -*- coding:utf-8 -*- (使用的编码内型)# python 2.7 <需要加第 ...
- Python反射机制理解
Python反射机制用沛齐老师总结的话说就是:利用字符串的形式去对象(模块)中操作(寻找)成员. getattr(object, name) object代表模块,name代表模块中的属性或成员,该函 ...
- day01 初识Python
今日主要内容 1.初识python 2.简单了解下python的数据类型 nubmer=int(input("请输入数字大小:")) if nubmer>66: print( ...
随机推荐
- 【Java基础】JAVA中优先队列详解
总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...
- C/C++ Qt 数据库与Chart历史数据展示
在前面的博文中具体介绍了QChart组件是如何绘制各种通用的二维图形的,本章内容将继续延申一个新的知识点,通过数据库存储某一段时间节点数据的走向,当用户通过编辑框提交查询记录时,程序自动过滤出该时间节 ...
- C#ADO.NET技术总结
[ADO.NET的主要组件-..NET framework数据提供程序和DataSet(数据集)] 一.DataSet数据集负责对数据库执行命令. 二.NET framework数据提供程序的四个核心 ...
- 【划重点】Python xlwt简介和用法
一.导入xlwt包,并初始化创建一个工作簿 import xlwt workbook=xlwt.Workbook() # 初始化创建一个工作簿 二.创建表单 sheet1=workbook.add_s ...
- 解决用creact-react-app新建React项目不支持 mobx装饰器模式导致报错问题 。
创建react项目 create-react-app mobx-demo cd my-app npm run start 使用react-app-rewired npm install customi ...
- 每一个each(Power Query 之 M 语言)
each _ 固定结构,表示每一个(废话,each这单词中文意思就是每一个) 但后面的下划线,是个省略参数的写法-- 首先,each后面不是非要跟_ 其次,_代表的意思是指定列里同行的每一个,这时的公 ...
- CF205A Little Elephant and Rozdil 题解
Content 有一头小象住在 \(\texttt{Rozdil}\) 小镇里,它想去其他的小镇旅行. 这个国家一共有 \(n\) 个小镇,第 \(i\) 个小镇距离 \(\texttt{Rozdil ...
- Go语言核心36讲(Go语言实战与应用二十七)--学习笔记
49 | 程序性能分析基础(下) 在上一篇文章中,我们围绕着"怎样让程序对 CPU 概要信息进行采样"这一问题进行了探讨,今天,我们再来一起看看它的拓展问题. 知识扩展 问题 1: ...
- MySQL增删改查的常用语句汇总
MySQL增删改查的常用语句汇总 以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop da ...
- 【九度OJ】题目1018:统计同成绩学生人数 解题报告
[九度OJ]题目1018:统计同成绩学生人数 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1018 题目描述: ...