Python教程: 反射及常用的几种方法
反射就是通过字符串映射或修改程序运行时的状态、属性、方法
有四个常用方法:
-
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("狗粮")
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码