Python概念-定制自己的数据类型(包装)
包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工)
实现方法被egon分成了两种:
1."基于继承"实现的包装
需求:定义一个只能包含数字的列表
代码示例:
# 编辑者:闫龙
class Egon(list):
def append(self, obj):#重写append方法
if(type(obj) == int):#判断obj是否为一个int型
super().append(obj)#调用父类的append方法将obj存放在列表中
else:
raise TypeError("Egon 只会数数")#主动抛出类型错误异常
def insert(self, index:int,object:int):#重写insert方法
if(isinstance(object,int)):#判断object是否为一个int型
super().insert(index,object)#调用父类的insert方法将object存放在列表的index位置
else:
raise TypeError("都跟你说了,Egon只会数数")#主动抛出类型错误异常
e=Egon([1,2,3])#实例化一个列表
e.append(1)
#e.append("1") 会抛出异常
e.insert(0,1)
#e.insert(0,"1") 会抛出异常
print(e)
实现全数字列表类型
2."基于授权"实现的包装
需求:不使用继承的方式,完成一个自己包装的文件操作
代码示例:
# 编辑者:闫龙
class Open:
def __init__(self,filename,mode,encoding): #在实例化Open的时候传入文件名称,打开方式,编码格式
self.filename = filename
self.mode = mode
self.encoding = encoding
#使用系统函数open()传入相应打开文件所需的参数,将文件句柄传递给self.file
self.file = open(filename,mode=mode,encoding=encoding)#这里我总感觉是在作弊
def read(self):#自己定义read方法
return self.file.read()#返回self.file文件句柄read()的值
def write(self,Context):#自己定义write方法
self.file.write(Context+"\n")#使用self.file文件句柄write方法将内容写入文件
print(Context,"已写入文件",self.filename)
# 利用__getattr__(),Attr系列中的getattr,当对象没有找到Open中传递过来的名字时,调用此方法
def __getattr__(self, item):
return getattr(self.file,item)#返回self.file文件句柄中,被对象调用,切在Open类中没有的名字 MyFile = Open("a.txt","w+","utf8")
MyFile.write("Egon is SomeBody")
MyFile.close()
MyFile = Open("a.txt","r+","utf8")
print(MyFile.read())
MyFile.seek(0)
print(MyFile.readline())
写了一个假Open!
说实话,Egon,你后来讲的又特么快了!
下次课的时候,你一定要把这个假Open讲一讲!
Python概念-定制自己的数据类型(包装)的更多相关文章
- Python之路- 反射&定制自己的数据类型
一.isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象 issubclass(sub, super)检查sub类是否是 super ...
- python入门(8)数据类型和变量
python入门(8)数据类型和变量 数据类型 在Python中,能够直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样 ...
- python基础——定制类
python基础——定制类 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方 ...
- 【原创】C++链表如何像Python List一样支持多种数据类型
用过Python的码友都知道,Python中List支持多种数据类型,如下面代码所示链表li内的数据类型可以是整数,同时也可以是字符串,当然也可以是其他数据类型. 1: >>> li ...
- Python学习笔记:02数据类型
Python 数据类型 python中标准的数据类型有 基础类型 整型(长整型) 浮点型 复数型 布尔型 序列类型 字符串 列表 元组 字典 整型 整型和长整型并不严格区分,整型int的表达范围和计算 ...
- Python自动化开发-变量、数据类型和运算
一.变量 变量定义:Variables are used to store infomation to referrenced and manipulated in a computer progra ...
- Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
- python学习日记(基础数据类型及其方法01)
数字 int 主要是用于计算的,常用的方法有一种 #既十进制数值用二进制表示时,最少使用的位数i = 3#3的ASCII为:0000 0011,即两位 s = i.bit_length() print ...
- python的6种基本数据类型--字典
python的6种基本数据类型--字典 字典 字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1:value1,key2:value2} 1.键与值用冒号":& ...
随机推荐
- API的HTTP Status Code
响应中的状态码 状态码 定义 说明 1xx 信息 接收到请求,继续处理 2xx 成功 操作成功地收到请求,理解和接受 3xx 重定向 为了完成请求,必须采取进一步擦措施 4xx 客户端错误 请求的语法 ...
- ng-include 上ng-controller 无法获取控件
A.Html内容如下 <div> <div kendo-grid="testGrid" k-options="testOptions"> ...
- Cron表达式简单的介绍
1.Cron是什么,用来做什么的 根据百度百科的解释:计划任务,是任务在约定的时间执行已经计划好的工作,这是表面的意思.在Linux中,我们经常用到 cron 服务器来完成这项工作.cron服务器可以 ...
- Python之路3【第零篇】目录
Web应用框架篇 1.Web应用框架前戏
- P4838 P哥破解密码
题目背景 P哥是一个经常丢密码条的男孩子. 在ION 8102赛场上,P哥又弄丢了密码条,笔试满分的他当然知道这可是要扣5分作为惩罚的,于是他开始破解ION Xunil系统的密码. 题目描述 定义一个 ...
- Business Cards UVALive - 4384(画图看图。。)
只能由三种情况 都横着放 都竖着放 横和竖交错放 那就去判断好了... 具体看代码 #include <iostream> #include <cstdio> #inclu ...
- BZOJ 1013 | 一份写了一堆注释的高斯消元题解
题意 给出\(n\)维直角坐标系中\(n + 1\)个点的坐标,它们都在一个\(n\)维球面上,求球心坐标. 题解 设球面上某两个点坐标为\((a_1, a_2, ... a_n)\)和\((b_1, ...
- 如何在Eclipse 中查看(如Objects)的源代码
今天突然想看Objects的源码,结果失败了,总结了一下,贴出来. 一般查看源码的流程: 使用快捷键Ctri+Shit+T出现Open Type的对话框,在里面直接输入类名,回车就行: 在Eclips ...
- 解题:SDOI 2014 数表
题面 为了好写式子,先不管$a$的限制 设$facs$为因子和,那么有 $ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^mfacs(gcd(i,j))$ 再设$f( ...
- 解题:USACO13FEB Taxi
题面 因为每次只能载一头牛,所以总路程=每头牛的距离+回头路的最短距离,于是问题变成了如何求回头路的最短距离 我们可以把起点和终点存在两个数组里,然后将两个数组排序后取对应位置相减的绝对值就是每次走回 ...