Python类反射机制使用实例解析


Posted in Python onDecember 30, 2019

这篇文章主要介绍了Python类反射机制使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数并执行。

Python有四个内置函数:

函数 功能
getattr(object, attr[, default]) 获取指定字符串名称的对象属性或方法,如果对象有该属性则返回属性值,如果有该方法则返回该方法的内存地址,如果都没有就报错,如果指定了默认值找不到不会报错会取默认值
hasattr(object, attr) 判断指定字符串名称的对象是否有该属性或方法,返回True或False
setattr(object, attr, value) 为指定字符串名称的对象设置属性,如果对象已有该属性则覆盖属性值,如果没有该属性则新增属性并赋值
delattr(object, attr) 删除指定字符串名称的对象的某属性,如果对象没有该属性会报错

示例:

class Demo:

  def __init__(self):
    self.name = 'abc'

  def method(self):
    pass


# 实例化
d = Demo()

# 获取对象中的属性、方法
name = getattr(d, 'name')
func = getattr(d, 'method')
print(name)
print(func)
print('\r')

# 查看是否有属性或方法
print(hasattr(d, 'name'))
print(hasattr(d, 'method'))
print(hasattr(d, 'abc'))

# 设置对象的属性值
setattr(d, 'name', 'aaa') # 已有的属性值会修改
setattr(d, 'age', 10) # 没有该属性会新增并赋值

# 删除对象的属性
delattr(d, 'name')

输出结果:

abc
<bound method Demo.method of <__main__.Demo object at 0x00000000028A27F0>>

True
True
False

反射的使用

demo1:

# 导包
time = __import__('time')
# 获取方法
sleep = getattr(time, 'sleep')
# 调用
sleep(5)

等价于:

# 1
import time
time.sleep(5)
# 2
from time import sleep
sleep(5)

demo2:

# 导包
webdriver = __import__('selenium.webdriver', fromlist=['webdriver'])
# 实例化,获取方法
driver = webdriver.Chrome()
quit = getattr(driver, 'quit')
# 调用方法
quit()

等价于:

from selenium import webdriver
driver = webdriver.Chrome()
driver.quit()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现上传下载文件功能
Nov 19 Python
Python搜索引擎实现原理和方法
Nov 27 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
Python Threading 线程/互斥锁/死锁/GIL锁
Jul 21 Python
PyCharm更改字体和界面样式的方法步骤
Sep 27 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
python自定义函数def的应用详解
Jun 03 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Python基础之Socket通信原理
Apr 22 Python
Python中如何处理常见报错
Jan 18 Python
Python读取YAML文件过程详解
Dec 30 #Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
Dec 30 #Python
pytorch中获取模型input/output shape实例
Dec 30 #Python
Python读取csv文件实例解析
Dec 30 #Python
Pytorch Tensor的统计属性实例讲解
Dec 30 #Python
PyTorch中permute的用法详解
Dec 30 #Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 #Python
You might like
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
PHP中数组的三种排序方法分享
2012/05/07 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
thinkphp缓存技术详解
2014/12/09 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
php解压缩zip和rar压缩包文件的方法
2019/07/10 PHP
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
jQuery ajax 当async为false时解决同步操作失败的问题
2016/11/18 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
VUE解决微信签名及SPA微信invalid signature问题(完美处理)
2019/03/29 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
2020/05/25 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
python+pandas分析nginx日志的实例
2018/04/28 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
如何利用cmp命令比较文件
2016/04/11 面试题
演讲稿的格式及范文
2014/08/22 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
业务员辞职信范文
2015/03/02 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
2015年教师节广播稿
2015/08/19 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
javascript函数式编程基础
2021/09/15 Javascript
Windows7下FTP搭建图文教程
2022/08/05 Servers