反射
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
四个可以实现自省的函数
hasattr(object,name) 判断对象或类有没有这个属性
getattr(object, name, default=None)如果有就取出值,没有就报错或打印第三个参数
setattr(x, y, v)给对象增加属性
delattr(x, y)删除属性
# class P:
# s=1
# name='sd'
#
# print(getattr(P,'c','行'))#行
# print(hasattr(P,'c'))#False
# setattr(P,'c',3)#P.c=3
# print(P.c)#3
# delattr(P,'c')
# print(getattr(P,'c','不行'))#不行
# t=P()
# setattr(t,'sfd','dfgr')#t.sfd=dfgr
# print(getattr(t,'sfd'))#dfgr
# print(hasattr(t,'w'))#False
# print(t.__dict__)#{'sfd': 'dfgr'}
# delattr(t,'name')#AttributeError: name
========================================================================
重写内置函数
class F:
def __init__(self,x):
self.x=x
def __del__(self):
print('删除了')
def __str__(self):
return '我是{}'.format(self.x)
def __getitem__(self, item):
return getattr(self,item)
def __setitem__(self, key, value):
return setattr(self,key,value)
f=F('X')
print(f)#我是X
print(f['x'])#X
f['s']=2
print(f.__dict__)#{'x': 'X', 's': 2}
#删除了 #运行结束自动删除对象
http://www.cnblogs.com/linhaifeng/articles/6204014.html#_label2