Python反射


针对于类对象或者模块
概念:通过字符串去操作类对象或者模块当中的成员(属性或者方法)

一、hasattr

检测对象/类是否有指定的成员
语法:hasattr(类/对象,“成员”)

class Man():
	pass
class Woman():
	pass
class Son(Man,Woman):
	def hobby(self):
		print("打篮球,玩电脑,游泳")
	def eat(self):
		print("羊肉串,大腰子,烤鱼")
obj=Son()
res=hasattr(Son,"hobby")
print(res)

运行结果:
运行结果

二、getattr

获取对象/类成员中的值

class Man():
	pass
class Woman():
	pass
class Son(Man,Woman):
	def hobby(self):
		print("打篮球,玩电脑,游泳")
	def eat(self):
		print("羊肉串,大腰子,烤鱼")
obj=Son()
#通过类反射出来的方法是一个绑定方法
func1=getattr(Son,"hobby")
func1(1)
#通过对象反射出来的方法是一个普通方法
func2=getattr(obj,"eat")
func2()
#反射成员不存在时,可以设置一个默认值防止报错
res=getattr(obj,"drink","该成员不存在")
print(res)

运行结果:
运行结果

综合案例:
获取当前文件中的自定义成员:

import sys
def func1():
	print("我是func1函数")
def func2():
	print("我是func2函数")
def func3():
	print("我是func3函数")
while True:
	selfmodules=sys.modules["__main__"]
	message=input("请输入你要反射的方法:")
	if hasattr(selfmodules,message):
		func=getattr(selfmodules,message)
		func()
	else:
		print("方法不存在")

运行结果:
运行结果

三、setattr

设置对象/类成员的值

class Man():
	pass
class Woman():
	pass
class Son(Man,Woman):
	def hobby(self):
		print("打篮球,玩电脑,游泳")
	def eat(self):
		print("羊肉串,大腰子,烤鱼")
obj=Son()
setattr(obj,"eye","黑色")
print(obj.eye)

运行结果:
运行结果

四、delattr

删除对象/类成员的值

class Man():
	pass
class Woman():
	pass
class Son(Man,Woman):
	def hobby(self):
		print("打篮球,玩电脑,游泳")
	def eat(self):
		print("羊肉串,大腰子,烤鱼")
obj=Son()
setattr(obj,"eye","黑色")
delattr(obj,"eye")
print(obj.eye)

运行结果:
运行结果

如上,成功删除成员值

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值