面向对象---高级

来源:互联网 发布:已备案域名怎么购买呢 编辑:程序博客网 时间:2024/06/04 19:44

       反射

       反射的概念是由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)#我是Xprint(f['x'])#Xf['s']=2print(f.__dict__)#{'x': 'X', 's': 2}
#删除了    #运行结束自动删除对象

http://www.cnblogs.com/linhaifeng/articles/6204014.html#_label2