python基础-面向对象编程之反射
面向对象编程之反射
反射
定义:通过字符串对对象的属性和方法进行操作。
反射有4个方法,都是python内置的,分别是:
hasattr(obj,name:str)
通过“字符串”判断对象的属性或方法是否存在。返回bool值,True表示有,False表示没有。
注意:查询方法时,只需写方法名,不要加小括号!!!
class User:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def show_userinfo(self):
print(f"姓名:{self.name},年龄:{self.age},性别:{self.gender}")
# 创建user对象
user = User("haha", 37, "男")
# 查询属性name 是否存在
res = hasattr(user, "name")
print(res) # 输出结果:True
# 查询方法show_userinfo 是否存在。注意:不要加括号!!
res_func = hasattr(user, "show_userinfo")
print(res_func) # 输出结果:True
res_func = hasattr(user, "show_userinfo()")
print(res_func) # 输出结果:False
getattr(obj,name:str,[default])
通过“字符串”获取对象的属性或方法
注意
1.如果只传入前两个参数,当属性或方法不存在,会报错;
2.为了防止当属性或方法不存在,该方法报错,设置第三个参数为找不到时的默认值
3.获取方法时,不要带小括号!!!
# 创建user对象
user = User("haha", 37, "男")
# 获取属性值
res = getattr(user, "name")
print(res) # 输出结果:haha
# 获取不存在的属性
res_false = getattr(user, "uid")
print(res_false) # 报错
# 设置默认值
res_true = getattr(user, "uid", "不存在")
print(res_true) # 不报错,输出结果:不存在
# 获取方法
res_func = getattr(user, "show_userinfo")
print(res_func) # 输出结果:方法内存地址
# 获取带括号的方法
func_false = getattr(user, "show_userinfo()")
print(func_false) # 报错
# 设置默认值
func_true = getattr(user, "show_userinfo()", "不存在")
print(func_true) # 不报错,输出结果:不存在
setattr(obj,name:str,value)
通过“字符串”设置对象的属性或方法
# 创建user对象
user = User("haha", 37, "男")
# 新增一个属性hobby,属性值是read
setattr(user, "hobby", "read")
print(user.hobby) # 输出:read
# 修改属性age的值
setattr(user, "age", 27)
print(user.age) # 输出:27
delattr(obj,name:str)
通过“字符串”删除对象的属性或方法
注意:
删除不存在的属性或方法,会报错
删除方法时,不要带小括号!!
# 创建user对象
user = User("haha", 37, "男")
# 删除属性gender
delattr(user, "gender")
print(user.gender) # 删除后,输出结果:报错'User' object has no attribute 'gender'
# 删除一个对象没有的属性
delattr(user, "hobby") # 不存在的属性,删除会报错
python基础-面向对象编程之反射的更多相关文章
- python基础-面向对象编程之继承
面向对象编程之继承 继承的定义:是一种新建类的方式,新建的类称之为子类或派生类,被继承的父类称之为基类或超类 继承的作用:子类会""遗传"父类的属性,从而解决代码重用问题 ...
- python基础-面向对象编程之封装、访问限制机制和property
面向对象编程之封装 封装 定义:将属性和方法一股脑的封装到对象中,使对象可通过"对象."的方式获取或存储数据. 作用:让对象有了"."的机制,存取数据更加方便 ...
- python基础-面向对象编程之多态
面向对象编程之多态以及继承.抽象类和鸭子类型三种表现形式 多态 定义:同一种类型的事物,不同的形态 作用: 多态也称之为"多态性".用于在不知道对象具体类型的情况下,统一对象调用方 ...
- python基础-面向对象编程之组合
面向对象编程之组合 定义:一个对象中拥有另一个或其他多个对象的属性和方法. 作用:减少代码的冗余,降低耦合度 关于耦合度的说明 耦合:通俗地讲,就是相互作用,相互影响的意思 耦合度越高,程序的可扩展性 ...
- Python基础教程之List对象 转
Python基础教程之List对象 时间:2014-01-19 来源:服务器之家 投稿:root 1.PyListObject对象typedef struct { PyObjec ...
- Python基础教程之udp和tcp协议介绍
Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...
- Python基础2:反射、装饰器、JSON,接口
一.反射 最近接触到python的反射机制,遂记录下来已巩固.但是,笔者也是粗略的使用了__import__, getattr()函数而已.目前,笔者的理解是,反射可以使用户通过自定义输入来导入响应的 ...
- python基础-类的反射
1)反射是通过字符串方式映射内存中的对象. python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr, 改四个函数分别用于对对象内部执行:检查是 ...
- python基础学习笔记——反射
对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...
随机推荐
- mysql操作篇续
# ### part1. 数据类型 - 时间date YYYY-MM-DD 年月日 (纪念日)time HH:MM:SS 时分秒 (体育竞赛)year YYYY 年份值 (酒的年份,82年拉菲)dat ...
- nginx配置中root和alias的区别
例:访问http://127.0.0.1/download/*这个目录时候让他去/opt/app/code这个目录找. 方法一(使用root关键字): location / { root /usr/s ...
- easyui三
陈旧的开发模式 美工(ui工程师:出一个项目模型) java工程师:将原有的html转成jsp,动态展示数据 缺点: 客户需要调节前端的展示效果 解决:由美工去重新排版,重新选色.Vs前后端分离 美工 ...
- Pwn-level0
题目地址 https://dn.jarvisoj.com/challengefiles/level0.b9ded3801d6dd36a97468e128b81a65d 第一步先看文件的属性 64 ...
- Gym 101806T Touch The Sky
http://codeforces.com/gym/101806/problem/T 题目 In the year 2117, Professor Jaemin Yu developed a line ...
- jmeter录制移动端脚本
jmeter录制脚本有两种方式,一种借助外部工具badbody,一种是本身的功能,使用代理服务器,介绍下如何使用代理服务器录制脚本.我一般在测app或者移动端H5页面时才会录制,所以此文也针对移动端. ...
- WEB 中的文件下载(待修改、完善)
在 WEB 开发中,我们会期望用户在点击某个链接的时候,下载一个文件(不管这个文件能不能被浏览器解析,都要下载).以前接触过一种方式,就是在响应 header 中设置 force-download : ...
- @Component, @Service, @Controller, @Repository区别
@Component, @Service, @Controller, @Repository是spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 @Componen ...
- layim+signalr2.0+mongodb在线轻聊版解决方案(可提供演示)
本内容有版权限制,仅提供学习交流参考等等,请勿随便转载或者代码商用. /** layui-v2.1.5 MIT License By http://www.layui.com */; layu ...
- Web前端开发框架大全-详述
可以说,前端技术的发展是互联网自身发展的一个缩影! 前端技术的发展经历了web1.0时代,即网页只能展示信息,几乎没有交互可言: web2.0时代,web2.0不再是单维的,逐渐发展为双向交流,另一特 ...