python反射理解与使用

python 反射

python 中有很多知识点,反射是高级语言中的一项重要的知识点。使用反射可以让代码更简洁更智能,让代码拥有了自省的能力。

反射是什么

反射可以根据字符串动态的判断,调用,添加/修改,删除类或类的实例化对象

python反射怎么实现对象内容的操作

Python 提供了四个方法进行类对象内容的操作
hasattr(obj,str) 判断一个实例对象obj里是否有对应的str字符串的方法
getattr(obj,str) 根据字符串获取obj对象里对应的方法的内存地址
setattr(obj,str,value) 通过str字符串去设置obj对象里的属性的值value或添加value相同的方法名的方法
**delattr(obj,str)**删除和字符串名字一致的属性或方法

代码中理解反射

代码中理解反射

#定义一个类
class student(object):
	def __init__(self,name):
		self.name = name
	
	#定义方法
	def study(self):
		print('%s in the room study'%self.name)

#实体化学生类
stuobj = student('shanghai');
def fun(self):
	print('%s play game-0-0'%self.name)

str = input("输入的字符串str:")

#判断字符串是不是类中的属性或方法
if hasattr(stuobj,str):
	#动态调用方法
	func = getattr(stuobj,str)
	#func调用
	func()
	#动态修改属性
	setattr(stuobj,str,"beijing")
	#动态删除方法或者属性
	delattr(stuobj,str)
else:
	#如果没有该字符串方法,创建一个新的与字符串方法相同的方法,动态的把方法装配到	类中或类的实例化对象中
	setattr(stuobj,str,fun)
	#用类的实例化对象调用这个方法,并且传入这个实例化对象
	stuobj.talk(stuobj)

类的反射特点

类,只能找类里面的成员

class Foo:
	def __init__(self,name):
		self.name = name
	def show(self):
		print('show')
obj = Foo('Abey')
print(hasattr(Foo,'show')) #True

对象,既可以找对象,也可以找类里面的成员

class Foo:
	def __init__(self,name):
		self.name = name
	def show(self):
		print('show')
#obj = Foo('Abey')
#print(hasattr(Foo,'show)) #True
#print(hasattr(Foo,'name))#False

obj = Foo('Abey')
print(hasattr(obj,'name'))#True
prin(hasattr(obj,'show'))#True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值