继承的方式完成包装

Posted wuweixiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了继承的方式完成包装相关的知识,希望对你有一定的参考价值。

定制自己的数据类型:

技术图片
class List(list):
    def append(self, p_object):
        if type(p_object) is str:
            # self.append(p_object)             #会无限循环
            super().append(p_object)            #调用父类的append方法,不用传self   == list.append(self,p_object)
        else:
            print(只能添加字符串类型)

    def show_midlle(self):
        mid_index=int(len(self)/2)
        return self[mid_index]


# l2=list(‘hell oworld‘)
# print(l2,type(l2))

l1=List(helloworld)
# print(l1,type(l1))
# print(l1.show_midlle())
l1.append(1111111111111111111111)           #只能添加字符串类型
l1.append(SB)
print(l1)               #[‘h‘, ‘e‘, ‘l‘, ‘l‘, ‘o‘, ‘w‘, ‘o‘, ‘r‘, ‘l‘, ‘d‘, ‘SB‘]
View Code


包装一个类型通常是对已存在类型的一些定制,这种做法可以新建、修改或删除原有产品的功能。其他的则保持原样。

授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就授权给对象的默认属性

技术图片
import time
class FileHandle:
    def __init__(self,filename,mode=r,encoding=utf-8):
        # self.filename=filename
        self.file=open(filename,mode,encoding=encoding)
        self.mode=mode
        self.encoding=encoding
    def write(self,line):
        print(------------>,line)
        t=time.strftime(%Y-%m-%d %X)
        self.file.write(%s %s %(t,line))

    def __getattr__(self, item):
        # print(item,type(item))
        # self.file.read
        return getattr(self.file,item)

f1=FileHandle(a.txt,w+)
# print(f1.file)
# print(f1.__dict__)
# print(‘==>‘,f1.read) #触发__getattr__
# print(f1.write)
f1.write(1111111111111111\n)
f1.write(cpu负载过高\n)
f1.write(内存剩余不足\n)
f1.write(硬盘剩余不足\n)
# f1.seek(0)
# print(‘--->‘,f1.read())
View Code

 

以上是关于继承的方式完成包装的主要内容,如果未能解决你的问题,请参考以下文章

FragmentContainer 与仅作为包装器的另一个 React 组件?

java中封装,继承,多态,接口学习总结

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

如何组合绑定片段而不将它们包装在 XML 文字中

如何包装所有片段(不在里面)or) with?

Android片段布局完成膨胀