python入行033(反射)
时间:2020-04-20
本文章向大家介绍python入行033(反射),主要包括python入行033(反射)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 反射
python是动态语言,反射指的是在程序运行过程中可以“动态”的获取对象的属性。
可以先通过内置函数dir来获取任意一个类或者对象的属性列表,列表中全为字符串格式;再使用内置的四个函数就可以通过字符串来操作对象属性了。
class People: def __init__(self, name, age): self.name = name self.age = age def say(self): print('<%s:%s>' % (self.name, self.age)) obj = People('辣白菜同学', 18) print(obj.name) print(obj.__dict__[dir(obj)[-2]]) >>> 辣白菜同学 >>> 辣白菜同学
四个内置函数的使用:
print(hasattr(obj, 'say')) >>> True print(getattr(obj, 'name')) >>> 辣白菜同学 setattr(obj, 'name', '土豆同学') print(obj.__dict__) >>> {'name': '土豆同学', 'age': 18} delattr(obj, 'name') print(obj.__dict__) >>> {'age': 18}
2 内置方法
2.1 什么是内置方法
定义在类内部,以__开头并以__结尾的方法;会在某种情况下自动触发执行。
class People: def __init__(self, name, age): self.name = name self.age = age obj = People('辣白菜同学', 18) # 调用类的时候自动执行__init__方法,初始化对象属性 print(People.__init__) >>> <function People.__init__ at 0x000002B2E7E1CD08>
2.2 为何要用内置方法
为了定制化我们的类or对象。
2.3 如何使用内置方法
(1)__str__() 在打印对象时会自动触发,然后将返回值(必须是字符串类型)当做本次打印的结果输出
class People:
def __init__(self, name):
self.name = name
def __str__(self):
return "%s" %(self.name)
obj = People('辣白菜同学')
print(obj)
>>> '辣白菜同学'
# python中一切皆对象,这也就解释了为什么我们在调用str类实例化对象时,打印对象能够直接打印出对象的属性值 obj = str('mrz') print(obj) >>> 'mrz'
(2)__del__()
# __del__:在清理对象时触发,会先执行该方法 class People: def __init__(self, name, age): self.name = name self.age = age # self.x = open('a.txt',mode='w') # self.x = 占据的是操作系统资源 def __del__(self): print('run...') # 发起系统调用,告诉操作系统回收相关的系统资源 # self.x.close() # obj = People('辣白菜同学', 18) del obj # obj.__del__() print('============>')
>>> run...
>>> ============>
原文地址:https://www.cnblogs.com/mmmmmrz/p/12707541.html
- MongoDB(一)环境搭建与初始配置
- AI进了直播间,这画风666
- CSS布局:水平居中
- docker学习(4) 一些常用操作
- Java多线程之细说线程池
- Windows8异步编程的注意事项
- Spring(一)Spring的第一滴血
- Flume(一)Flume原理解析
- 我所理解的Remoting (2) :远程对象的生命周期管理[下篇]
- struts2(六)之ognl表达式与ActionContext、ValueStack
- Windows8异步编程的注意事项
- CSS魔法堂:深入理解line-height和vertical-align
- Gradle 10分钟上手指南
- gradle项目中profile的实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 专为程序员定制的垃圾清理工具(Node Cli实现)
- CodePen vue SFC 、flutter 在线玩耍来袭
- [重拾CSS]一道面试题来看伪元素、包含块和高度坍塌
- webpack 拍了拍你,给了你一份图解指南(模块化部分)
- 深入探究Immutable.js的实现机制(一)
- 深入探究immutable.js的实现机制(二)
- ES6 Promise 的最佳实践
- 「 Map最佳实践」什么时候适合使用 Map 而不是 Object
- ES2017 异步函数的最佳实践(`async` /`await`)
- React Hooks中这样写HTTP请求可以避免内存泄漏
- 用了这 7 个 VS Code 插件,想写一辈子代码
- 听说你还不知道Promise的allSettled()和all()的区别?
- React 条件渲染最佳实践(7 种方法)
- 一文带你层层解锁「文件下载」的奥秘
- Android实现简单C/S聊天室应用