python基础学习中要懂的知识点:反射机制
反射是什么
反射指在程序运行过程中可以动态获取对象的信息。 是通过字符串的形式 ,导入模块;通过字符串的形式,去模块 寻找指定函数 ,并执行。利用字符串的形式去对象中操作成员,一种 基于字符串的驱动 。
Python反射中的内置函数
getattr()
getattr():用于获取 对象中的属性 ,但是其不能获取 私有变量 也就是最前面带 __ 的属性或方法,getattr(object,name,default)其有三个参数
- object :对象
- name :对象中的属性值
- default :可选 该对象中不存在该属性的时候的返回值。
例子:
class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(getattr(b, 'name', 'not found')) # 输出:Bbprint(getattr(b, 'cc', 'not found')) # 输出:not foundfunc = getattr(b,'add',None)print(func) # 输出:<bound method B.add of <__main__.B object at 0x00000248C7F48648>>func() # 输出:B
hasattr()
hasattr(object,name)该函数用于检测对象( object )中是否含有name (指的是某个属性名而并不是指name) 这个属性,其中object是对象,name是指需要检查该对象中是否存在的属性的名称。
例子:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(hasattr(b, 'ccc')) # Falseprint(hasattr(b, 'add')) # True
setattr()
setattr(object,name,value)是指给某个对象某个属性设置指定的值,object是对象,name是对象中的属性名,value是你想要设的值。其中三个参数都是必须的填的。
该函数可以给对象增加新的属性并且可以将对象中的方法改变。
例子:
class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(b.age) # 40setattr(b,'age',50)print(b.age) # 50def cc():print('i am changed')b.add() # Bsetattr(b,'add',cc)b.add() # i am changed# print(dir(b))
delattr()
delattr(object,name)指删除对象中的指定属性,其中object是对象,name是对象中的属性名。
例子:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(dir(b)) # [,'add', 'age', 'name'] dir()函数会输出一大堆,在这里我把输出的一些属性名直接删除了print(hasattr(b,'age')) # Truedelattr(b,'age')print(dir(b)) # [,'add', 'name']print(hasattr(b,'age')) # False
我在这里再补充说明下 dir() 这个函数: dir()不带变量时候用于获取当前范围内的变量、方法和定义的类型列表;带参数时返回参数的属性、方法列表。
- dir(object) object:对象、变量、类型
以上就是python反射中的四个内置函数。
python反射的应用
反射的一个应用就是 web框架 中的 url路由 ,用户通过输入 url路由 就可以定位到 views视图 中的函数,这里面主要应用了 getattr() 这个函数,一个用于获取 views视图中对应函数 ,如果没有就返回你设定的值以此判断是否可以往下执行。
python基础学习中要懂的知识点:反射机制相关推荐
- Java基础学习总结(75)——Java反射机制及应用场景
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
- python基础学习中常见问题
1.python for循环print不同层级的区别 方式1: sum=0 for i in range(11):sum=sum+iprint(sum) 输出结果: 0 1 3 6 10 15 21 ...
- Python基础学习-Python中最常见括号()、[]、{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho
Python基础学习-Python中最常见括号().[].{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho ...
- python自学用什么书好-适合python基础学习的好书籍
分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> 内容简介:本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用P ...
- python基础学习_转行零基础该如何学习python?很庆幸,三年前的我选对了
这似乎是一个如荼如火的行业,对于一直在思考着转行的我,提供了一个不错的方向. 这个行业当然就是python程序员,真正开始决定转行是在24岁的时候,到现在已经有三年多了,我从零开始,每天用业余两个小时 ...
- python基础学习的书籍
分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> <Python编程:从入门到实践> 书籍详情链接 内容简介:本书是一本针对所有层次的Python ...
- python | 基础学习(一)了解Bug、pycharm、变量、程序的三大流程(顺序、if、while)、运算符、快捷键
文章目录 一.引言 1.python的起源 2.解释器 3.python的设计目标 4.python的特点 二.python 1.了解BUG 2.python的三种运行方式 ①解释器python/py ...
- Python基础学习教程:如何用Python来写pm2.5空气质量查询程序
今天就教大家用之前有跟大家分享过的python基础学习教程完成首个MVP,如何用CLI(command-line interface,命令行界面)来执行第一个空气质量查询程序. 知识点 如何进行txt ...
- Python基础学习之布尔表达式
在Python编程的学习中,布尔逻辑可以说是无处不在.布尔表达式是计算机运算的基础和重要组成部分,掌握它们就跟学音乐要掌握音阶一样有必要.今天本文将带大家一起来学习布尔表达式,主要内容有布尔表达式的概 ...
最新文章
- 百万奖金 !「悟道之巅」AI创新应用大赛,开幕!
- 设置linux防火墙服务不开机启动,Linux关闭防火墙并设置开机启动/不启动
- php dirtoarray,PHP Ds\Stack toArray()用法及代码示例
- [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]
- 解决:Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRA
- IP地址、子网掩码、网关、默认网关、DNS的理解
- 接口和一些抽象类的区别
- Verilog奇偶校验_zt
- 新发布GoldenGate 12c版本中的主要特性
- mysql show profile_MySQL show profile使用说明
- 电压比较器,电压比较器原理
- 红外通信红外编码—NEC协议
- 如何批量压缩图片?这几个方法值得一试
- JPEGView(图片浏览编辑器)绿色版 v1.0.37
- C语言之“输出100~200之间的素数”
- 正则匹配中英文全部特殊符号
- pytorch基础(九)- 自定义数据集训练模型 和 迁移学习
- 直播的用户体验体系与质量监控方案
- 我的世界java版注册账号教程_我的世界java版官方购买教程
- 架构师技能5:如何做code review 代码简洁之道