反射是什么

反射指在程序运行过程中可以动态获取对象的信息。 是通过字符串的形式 ,导入模块;通过字符串的形式,去模块 寻找指定函数 ,并执行。利用字符串的形式去对象中操作成员,一种 基于字符串的驱动 。

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基础学习中要懂的知识点:反射机制相关推荐

  1. Java基础学习总结(75)——Java反射机制及应用场景

    什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...

  2. python基础学习中常见问题

    1.python for循环print不同层级的区别 方式1: sum=0 for i in range(11):sum=sum+iprint(sum) 输出结果: 0 1 3 6 10 15 21 ...

  3. Python基础学习-Python中最常见括号()、[]、{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho

    Python基础学习-Python中最常见括号().[].{}的区别 2015-08-13 07:54 by xuxiaoxiaoxiaolu, 1138 阅读, 0 评论, 收藏, 编辑 Pytho ...

  4. python自学用什么书好-适合python基础学习的好书籍

    分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> 内容简介:本书是一本针对所有层次的Python 读者而作的Python 入门书.全书分两部分:第一部分介绍用P ...

  5. python基础学习_转行零基础该如何学习python?很庆幸,三年前的我选对了

    这似乎是一个如荼如火的行业,对于一直在思考着转行的我,提供了一个不错的方向. 这个行业当然就是python程序员,真正开始决定转行是在24岁的时候,到现在已经有三年多了,我从零开始,每天用业余两个小时 ...

  6. python基础学习的书籍

    分享几本python基础学习的书籍给大家 <Python编程:从入门到实践> <Python编程:从入门到实践> 书籍详情链接 内容简介:本书是一本针对所有层次的Python ...

  7. python | 基础学习(一)了解Bug、pycharm、变量、程序的三大流程(顺序、if、while)、运算符、快捷键

    文章目录 一.引言 1.python的起源 2.解释器 3.python的设计目标 4.python的特点 二.python 1.了解BUG 2.python的三种运行方式 ①解释器python/py ...

  8. Python基础学习教程:如何用Python来写pm2.5空气质量查询程序

    今天就教大家用之前有跟大家分享过的python基础学习教程完成首个MVP,如何用CLI(command-line interface,命令行界面)来执行第一个空气质量查询程序. 知识点 如何进行txt ...

  9. Python基础学习之布尔表达式

    在Python编程的学习中,布尔逻辑可以说是无处不在.布尔表达式是计算机运算的基础和重要组成部分,掌握它们就跟学音乐要掌握音阶一样有必要.今天本文将带大家一起来学习布尔表达式,主要内容有布尔表达式的概 ...

最新文章

  1. 百万奖金 !「悟道之巅」AI创新应用大赛,开幕!
  2. 设置linux防火墙服务不开机启动,Linux关闭防火墙并设置开机启动/不启动
  3. php dirtoarray,PHP Ds\Stack toArray()用法及代码示例
  4. [Leedcode][JAVA][第25题][K个一组反转链表][链表][递归]
  5. 解决:Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRA
  6. IP地址、子网掩码、网关、默认网关、DNS的理解
  7. 接口和一些抽象类的区别
  8. Verilog奇偶校验_zt
  9. 新发布GoldenGate 12c版本中的主要特性
  10. mysql show profile_MySQL show profile使用说明
  11. 电压比较器,电压比较器原理
  12. 红外通信红外编码—NEC协议
  13. 如何批量压缩图片?这几个方法值得一试
  14. JPEGView(图片浏览编辑器)绿色版 v1.0.37
  15. C语言之“输出100~200之间的素数”
  16. 正则匹配中英文全部特殊符号
  17. pytorch基础(九)- 自定义数据集训练模型 和 迁移学习
  18. 直播的用户体验体系与质量监控方案
  19. 我的世界java版注册账号教程_我的世界java版官方购买教程
  20. 架构师技能5:如何做code review 代码简洁之道

热门文章

  1. 0121 - 开始学习 EOS 编程
  2. 吓尿了!手机充完电不拔充电器后果这么严重
  3. tar 相关知识软硬连接
  4. DR模式 mysqlABB读写分离
  5. SubSonic数据库操作
  6. [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  7. java if在内存中_全面理解Java内存模型
  8. 【云ERP】SAP S/4 HANA CLOUD 采购订单处理基本操作
  9. SAP库存解析(MC.9)
  10. 致远今目标移动APP无法脱离PC单独使用