博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day28 反射 属性操作 getattr hasattr setattr delattr
阅读量:7063 次
发布时间:2019-06-28

本文共 1799 字,大约阅读时间需要 5 分钟。

反射    用字符串来对应其同名的属性或者方法,通过某种方法调用这个字符串来执行方法或者获取属性    网络编程的时候非常好用,是很重要的内容 先看个示例吧:
1 class Teather: 2     dic = { 3         "查看学生信息":"show_student", 4         "查看讲师信息":"show_teacher" 5     } 6  7     def show_student(self): 8         print("学生:羊驼") 9 10     def show_teacher(self):11         print("讲师:羊驼")12 13     @classmethod14     def func(cls):15         print("ahahah")16 17 alex = Teather()18 for k in Teather.dic:19     print(k)20 key = input("请输入指令:")21 print(Teather.dic[key])              # 查看讲师信息      # 输出具体指令    22 print(type(Teather.dic[key]))        # 
# 字符串类型23 getattr(alex,Teather.dic[key])() # 讲师:羊驼 # 通过字符串反射到同名方法执行得出结果
具体用到的方法:   hassattr 判断属性或者方法是否存在   getattr  字符串反射属性或者方法   delattr  删除属性   setattr  创建属性,如果存在则重新赋值,不存在则创建后赋值
1 class A(): 2     def __init__(self,name): 3         self.name = name 4      5     def hi(self): 6         return f"hi~{self.name}~" 7  8 a = A(name="lala") 9 print(hasattr(a,"name"))     # True # 创建后存在此属性了10 print(a.name)                # lala11 print(a.hi())                # hi~lala~12 13 delattr(a,"name")14 print(hasattr(a,"name"))     # False    # 删除属性后不存在此属性了15 # print(a.name)              # AttributeError: 'A' object has no attribute 'name'16 # delattr(a,"hi")            # AttributeError: hi    # 不能删除对象的方法17 print(a.hi())             # 删除了属性并不会影响这个实例调用其本就可以调用的其他方法,仅仅是失去那个属性18 19 # a.name = "haha"            # 直接创建赋值这样感觉最简单最方便20 setattr(a,"name","haha")     # setattr 其实和上面是等效的,但是用起来还麻烦些.21 setattr(a,"age",19)          # setattr 也可以做到创建未存在的属性不存在则添加并赋值22 print(a.name)                # haha23 print(a.age)                 # 1924 25 str = "hi"26 if    hasattr(a,str):          # 判断一下是否存在这个属性或者方法27     print(getattr(a,str)())    # hi~haha~    # 从字符串反射过去方法执行结果

 

转载于:https://www.cnblogs.com/shijieli/p/9923165.html

你可能感兴趣的文章
Docker 入门及安装[Docker 系列-1]
查看>>
java中使用反射获取pojo(实体)类的所有字段值
查看>>
Linux - 常用参考资料(持续更新)
查看>>
运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本
查看>>
Linux - tar命令详解
查看>>
DFA和NFA
查看>>
NTP常见问题和解决方案&配置文件详解
查看>>
XmlParser和HtmlParser
查看>>
smartsvn学习(二)如何在Xcode下使用SVN
查看>>
我的友情链接
查看>>
二维条码防伪封签是怎样进行防伪的
查看>>
今天,让Mac更好用!
查看>>
EXCHANGE 备忘
查看>>
教你深入系统的学习linux系统
查看>>
前台向后台隐藏传参数
查看>>
Oracle10g手工创建数据库
查看>>
JS下载文件
查看>>
Nginx 模块常用命令介绍
查看>>
thinkphp5.0框架swoole的使用
查看>>
继上一篇SQL练习题,给出答案
查看>>