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中删除文件的程序代码
Mar 13 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
Python实现的Excel文件读写类
Jul 30 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python微信公众号开发平台
Jan 25 Python
python: line=f.readlines()消除line中\n的方法
Mar 19 Python
linux安装Python3.4.2的操作方法
Sep 28 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 Python
python实现PolynomialFeatures多项式的方法
Jan 06 Python
Python学习之时间包使用教程详解
Mar 21 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
抓取YAHOO股票报价的类
2009/05/15 PHP
php对数组排序代码分享
2014/02/24 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php学习笔记之基础知识
2014/11/08 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
js内置对象 学习笔记
2011/08/01 Javascript
jQuery.validate 常用方法及需要注意的问题
2013/03/20 Javascript
javascrip关于继承的小例子
2013/05/10 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
JavaScript实现shuffle数组洗牌操作示例
2019/01/03 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
简化Python的Django框架代码的一些示例
2015/04/20 Python
python使用post提交数据到远程url的方法
2015/04/29 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python字符串切片操作知识详解
2016/03/28 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
室内设计专业学生的自我评价分享
2013/11/27 职场文书
计算机网络工程专业职业生涯规划书
2014/03/10 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
先进党员事迹材料
2014/12/24 职场文书
大学生活感想
2015/08/10 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android