定制自己的数据类型(二次加工标准类型(包装))

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定制自己的数据类型(二次加工标准类型(包装))相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工)

定制了子类List的append,多了类型检查功能

 

class List(list):#继承list所有的属性,也可以派生出自己新的,比如append和mid
    def append(self,p_object):
        派生自己的append:加上类型检查
        if not isinstance(p_object,int):
            raise TypeError(must be int)
        super().append(p_object)
    @property
    def mid(self):
        新增自己的属性
        index=len(self)//2
        return self[index]
l=List([1,2,3,4])
print(l)
l.append(5)
print(l)

授权:授权是包装的一个特性, 包装一个类型通常是对已存在的类型的一些定制,这种做法可以新建,修改或删除原有产品的功能。其它的则保持原样。授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就授权给对象的默认属性。

实现授权的关键点就是覆盖__getattr__方法

# 授权:授权是包装的一个特性,包装一个类型通常是对已经存在的类型的一些定制,这种做法可以新建,
# 修改或删除原有产品的功能。其他的则保持原样。
# 授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就能授权给对象的默认属性
# 实现授权的关键点就是覆盖__getattr__方法

import time
class FileHandle:
    def __init__(self,filename,mode=r,encoding=utf-8):
        self.file=open(filename,mode,encoding=encoding)
    def write(self,line):
        t=time.strftime(%Y-%m-%d %T)
        self.file.write(%s %s%(t,line))
    def __getattr__(self,item):
        return getattr(self.file,item)
f1=FileHandle(b.txt,w+)
f1.write(你好啊)
f1.seek(0)
print(f1.read())
f1.close()

 

---恢复内容结束---

以上是关于定制自己的数据类型(二次加工标准类型(包装))的主要内容,如果未能解决你的问题,请参考以下文章

包装和授权

二次加工系统的标准类型 包装与授权

Python进阶-----类继承的方式完成包装

二次加工标准类型(包装)

补8.python之面相对象part.6(补充授权与继承的概念)

14.继承与授权