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分析nignx访问日志脚本分享
Feb 26 Python
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
使用Python保存网页上的图片或者保存页面为截图
Mar 05 Python
Python探索之pLSA实现代码
Oct 25 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
python将文本中的空格替换为换行的方法
Mar 19 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
python破解同事的压缩包密码
Oct 14 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
Jan 09 Python
Django中的JWT身份验证的实现
May 07 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
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
开启PHP Static 关键字之旅模式
2015/11/13 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
javascript add event remove event
2008/04/07 Javascript
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
javascript处理table表格的代码
2010/12/06 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
在JS数组特定索引处指定位置插入元素的技巧
2014/08/24 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
JS实现太极旋转思路分析
2016/12/09 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
vue2使用keep-alive缓存多层列表页的方法
2018/09/21 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
详解Node.js一行命令上传本地文件到服务器
2019/04/22 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
详解爬虫被封的问题
2019/04/23 Python
pandas中read_csv的缺失值处理方式
2019/12/19 Python
上课说话检讨书大全
2014/01/22 职场文书
医生辞职信范文
2015/03/02 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
分析Python list操作为什么会错误
2021/11/17 Python
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫