python面向对象之反射

反射,也叫自省。吾日三省吾身,说白了就是自己检测自己,这就叫反射。千万别被这个抽象的名词给吓到了,没什么牛逼的。

反射的四种方法:
1> hasattr(obj,name) #判断obj.name是否存在,name指代属性,包括数据属性和函数属性。
2> getattr(obj,name) #获取obj.name的结果,如果是函数属性,则加上()即可运行函数。
3> setattr(obj,name,value) #新增或者修改obj.name,且值设置为value
4> delattr(obj,name) #删除obj.name属性
还有三种内置方法:
1> __getattr__(self, item) #当self.item不存在时则触发此函数
2> __setattr__(self, key, value) #当要给设置属性值时触发
3> __delattr__(self, item) #删除某个属性时触发
上面这些属性中最重要的就是__getattr__(self,item)用途最广,用于通过组合方式完成授权。

来段代码吧:
改写文件处理中的write方法: --这也是用组合的方式完成授权

import time
class Filehandle:
    def __init__(self,filename,mode='r',encoding='utf-8'):
        self.file=open(filename,mode,encoding=encoding)
        self.mode=mode
        self.encoding=encoding
    def write(self,content):
        tm=time.strftime('%Y-%m-%d %X')
        self.file.write('%s %s' %(tm,content))
    def __getattr__(self, item): #如果直接 f.read()就会触发此处的方法,调用open函数自带的read方法。
        return getattr(self.file,item)

f=Filehandle('ownerfile','w',encoding='utf-8')
f.write('hello')

此时打开ownerfile文件的内容是:
          2024-08-05 09:09:48 hello

怎么样?就问你牛逼不牛逼!哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值