面向对象---高级

       反射

       反射的概念是由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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值