初识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( ...
随机推荐
- 【Services】【Web】【LVS】lvs基础概念
1.简介 1.1. 作者:张文嵩,就职于阿里 1.2. LVS是基础四层路由.四层交换的软件,他根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机: 1.3. IPTABLES的请求转发路 ...
- arcgis api for js自定义引用方式
(1)常规模式 即arcgis js常见的模块引用方式,采用 require-function 模式,function的参数与require一一对应即可(dojo/domReady!比较特殊,无需 ...
- java中注释、关键字、标识符,数据类型(上)
一.java中的注释(有3种) 注释:是给写代码的人看的,注释不会被执行 单行注释:用符号"//"实现 多行注释:用"/* */ " 实现 javaDoc(文档 ...
- java 8 启动脚本优化 3
#!/bin/bash #链接文件 source /etc/profile #java虚拟机启动参数 #通过http://xxfox.perfma.com/jvm/check来检查参数的合理性 #各参 ...
- c++跨平台字符编码与乱码杂谈
blos https://article.itxueyuan.com/qpQml https://www.cnblogs.com/wangmh/p/7265258.html https://blog. ...
- iOS越狱插件源查找及避免插件劫持
1.关于 iOS越狱插件源查找地址:https://www.ios-repo-updates.com/ 2.注意 不要使用不可靠的第三方源,其可能存在劫持,而你却茫然不知. 使用上面的网站查找你需要的 ...
- 【LeetCode】174. Dungeon Game 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...
- 【LeetCode】754. Reach a Number 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学 日期 题目地址:https://leetcod ...
- 1057 - Collecting Gold
1057 - Collecting Gold PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB ...
- Crypto CTF 2019 writeup
Crypto CTF 2019 writeup roXen 题目 roXen Relationship with a cryptographer! The Girlfriend: All you ev ...