首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python组合的方式完成授权

1、包装是在之前原有的方法的基础上,在做一点改动,这叫包装,就像包装那个append方法

现在我们来做一个open方法

2、啥都没做,那我们来改动一下

现在就创建了一个a.txt

3、再改善一下

4、我们看下我们自己的这个read跟系统的open方法的read是不是一个东西

5、现在f.write也能调用了。read你会调用了write也是一样的呀,实例里面没有,类里面也没有,最终触发了getattr,getattr里面是调用的系统的open方法里面的write。所以肯定是可以的

6、我们执行一下write操作看看能不能写入到文件里面

结果是a.txt里面成功写入了,现在就牛逼了。我们发现我们的实例f1是通过FileHandle这个方法进行write的,并不是系统的open的方法里面的write属性,是经过了getattr中转了一下。

7、我们seek一下,再读一下,到这一步,我们发现,相当于open的所有的方法都传递过来了,都可以正常使用了,上一个是学的包装,继承和派生完成的包装,继承是父类由什么我就继承过来,现在到这里就相当于把open里面的方法继承过来了

8、上面完成了读操作了,还没有完成写操作呢

实例再调用wirte的方法的时候,先在实例的属性字典里面找,然后去类的属性字典里面找,找不到的话才会触发getattr,所以我们想完成写操作,就在类里面定义一个write的方法就行了,当实例调用的时候会先从类里面找到write就直接执行了

现在这个write就是调用的自己在类里面定义的那个write方法了,并没有真实的写入到文件中去,而且单纯的打印了一下东西

9、如何实现文件的真正的写操作呢

10、给文件内容的前面每行都加上时间

这种就是组合的方式,给self.file赋予了一个文件描述符,然后利用__getattr__来return所有正常的open里面的所有的属性,如果我们不自己定制write的方法的话,所有的方法就已经是跟系统的方法一样了,但是我们自己定制了write的方法了,给前面加了时间,当然也可以做其他的,比如直接pass,那其他人在调用write的方法的时候就写入不了了

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190722A0SIAW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券