美文网首页Python基础系列
Python组合的方式完成授权

Python组合的方式完成授权

作者: 我爱学python | 来源:发表于2019-07-22 19:46 被阅读5次

    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的方法的时候就写入不了了

    相关文章

      网友评论

        本文标题:Python组合的方式完成授权

        本文链接:https://www.haomeiwen.com/subject/wwlglctx.html