1.什么是反射
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检修和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算科学领域关于应用反射性的研究。它率先被程序语言的设计领域所采用。
2.Python中面向对象中的反射:通过字符串的形式操作对象相关的属性,python中的一切皆对象(都可以使用反射)
3.可以实现自省的四个函数
举个例子:
class People:
country="China"
def __init__(self,name):
self.name=name
def tell(self):
print('%s is good' %self.name)
obj=People('OMG')
'''
1、hasattr(object,name)
判断object中没有一个name字符串对应的方法和属性
'''
print(hasattr(People,'country'))
print('country' in People.__dict__)
print(hasattr(obj,'name'))
print(hasattr(obj,'country'))
print(hasattr(obj,'tell'))
'''
2、getattr(object,name,default=None)
'''
x=getattr(People,'country1',None)
print(x)
f=getattr(obj,'tell',None)#obj.tell
print(f == obj.tell)
f()
obj.tell()
'''
3、setattr(x,y,v)
'''
People.x=111
setattr(People,'x',111)
print(People.x)
obj.age=18
setattr(obj,"age",18)
print(obj.__dict__)
'''
4、delattr(x,y)
'''
del People.country
delattr(People,"country")
print(People.__dict__)
del obj.name
delattr(obj,"name")
print(obj.__dict__)