Python 小知识点(9)--反射
2024-08-31 00:41:48
通过字符串映射或修改程序运行时的状态、属性、方法。有如下四个方法
1.hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
2.getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址
3.setattr(obj,'y',z), is equivalent to ``x.y = v'' obj是一个对象 y是一个对象中需要的属性 v 是y的值
4.delattr is equivalent to ``del x.y''
实例代码如下:
'''
反射
hasattr(obj,name_str) , 判断一个对象obj里是否有对应的name_str字符串的方法
getattr(obj,name_str), 根据name_str字符串去获取obj对象里的对应的方法的内存地址
setattr(obj,'y',z), is equivalent to ``x.y = v''
delattr is equivalent to ``del x.y''
'''
def bulk(self):
print("%s is yelling...." %self.name) class Dog(object):
def __init__(self,name):
self.name = name def eat(self,food):
print("%s is eating..."%self.name,food) d = Dog("TD")
choice = input(">>:").strip() if hasattr(d, choice):
haveFunc = getattr(d, choice)
haveFunc("food")
else:
setattr(d, choice, bulk) #若从控制台输入的字符串为talk此时此处等价于d.talk = bulk
Add_func = getattr(d, choice)
Add_func(d)
结论:反射是通过字符串的形式操作对象相关的成员。一切事物都是对象!!!
最新文章
- 字符编码笔记:ASCII,Unicode和UTF-8 转
- position:fixed失效
- SeaJS与RequireJS最大的区别
- mongodb远程连接以及备份、还原、导出、导入
- linux常用头文件及说明
- 课堂里学不到的C与C++那些事(一)
- CSS3秘笈:第二章
- ubuntu14下python环境的配置
- libsvm参数选择
- oracle 数据库管理--管理表空间和数据文件
- .net 系列:并发编程之一 并发编程的初步理论
- PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组
- 关于spring mybateis 定义resultType=";java.util.HashMap";
- 【iOS】Swift LAZY 修饰符和 LAZY 方法
- linux下64位汇编的系统调用(3)
- 一条sql执行过长的时间,你如何优化,从哪些方面?
- nginx进行反向代理,80端口使用
- C++向量 vector动态数组
- ID过滤靓号写法(PHP和Nodejs版本)
- 5.4 C++重载输入与输出操作符