|
反射就是通过字符串映射或修改程序运行时的状态、属性、方法
有四个常用方法:
- hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
- getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
- setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
- delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
反射Demo举例:- #!/usr/bin/env python
- # _*_ coding:utf-8 _*_
- '''
- hasattr(obj,name_str) 判断一个obj对象是否有对应name_str的方法
- getattr(obj,name_str) 根据字符串name_str获取Obj对象中对应方法的内存地址
- setattr(obj,key,value) 为对象Obj新增或修改属性或者方法
- delattr(obj,name_str) 删除对象obj中名为name_str的属性或者方法
- '''
- 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 %s"%(self.name,food))
-
- jim=Dog("Jim")
- choise=input(">>输入需要执行的操作:").strip()
- if hasattr(jim,choise):
- func=getattr(jim,choise)
- func("巧克力")
- #delattr(jim,choise)
- else:
- #Python学习交流群:153708845
- #动态装配一个方法 choise为方法名,bulk为方法的内存地址
- setattr(jim,choise,bulk)
- # 调用时用转配的方法名,即传入的choise值,这里需要传入对象本身
- getattr(jim,choise)(jim)
- #动态装配一个属性,也可以修改属性
- setattr(jim,choise,"新装配的属性")
- print(getattr(jim,choise))
- #print(jim.name)
- #jim.eat("狗粮")
复制代码 来源:https://www.cnblogs.com/xxpythonxx/p/18204386
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|