Python扩展内置类型详解


Posted in Python onMarch 26, 2018

除了实现新的种类的对象以外,类有时有用于扩展Python的内置类型的功能。主要有以下两种技术:

通过嵌入扩展类型

下例把一些集合函数变成方法,而且新增了一些基本运算符重载,实现了新的集合对象。对于多数类而言,这个类只是包装了Python列表,以及附加的集合运算。

#File setwrapper.py 
 
class Set: 
  def __init__(self,value=[]):#构造函数 
    self.data = [] 
    self.concat(value) 
  def intersect(self,other):#求交集 
    res = [] 
    for x in self.data: 
      if x in other: 
        res.append(x) 
    return Set(res) #返回一个新的Set 
 
  def union(self,other):#求并集 
    res = self.data[:] #复制self.data 
    for x in other: 
      if not x in res: 
        res.append(x) 
    return Set(res) 
 
  def concat(self,value): 
    for x in value: 
      if not x in self.data: 
        self.data.append(x) 
 
  def __len__(self): # len(self) 
    return len(self.data)  
 
  def __getitem__(self,key): # self[i] 
    return self.data[key] 
 
  def __and__(self,other): # self & other 
    return self.intersect(other)  
 
  def __or__(self,other): # self | other 
    return self.union(other) 
 
  def __repr__(self): # print 
    return 'Set:' + repr(self.data) 
 
if __name__ == '__main__': #测试用例 
  x = Set([1,3,5,7]) 
  print(x.union(Set([1,4,7]))) 
  print(x | Set([1,4,6])) 
  print(x[2]) 
  print(x[2:4])

重载索引运算让Set类的实例可以充当真正的列表。运行结果如下:

>>>  
Set:[1, 3, 5, 7, 4] 
Set:[1, 3, 5, 7, 4, 6] 

[5, 7] 

通过子类扩展类型

从Python2.2开始,所有内置类型都可以直接创建子类。
这样让你可以通过用户定义的class语句,定制或扩展内置类型的行为:建立类型名称的子类并对其进行定制。类型的子类实例,可以用在原始的内置类型能够出现的任何地方。
例如,假如你对Python列表偏移值以0开始计算而不是1开始一直很困扰,这时你就可以编写自己的子类,定制列表的核心行为,如下:

# File typesubclass.py 
#Map 1..N to 0..N-1; call back to built-in version 
 
class MyList(list): 
  def __getitem__(self,offset): 
    print('(indexing %s at %s)'%(self,offset)) 
    return list.__getitem__(self,offset-1) 
 
if __name__ == '__main__': 
  print(list('abc')) 
  x = MyList('abc') 
  print(x) 
 
  print(x[1]) 
  print(x[3]) 
  x.append('spam') 
  print(x) 
  x.reverse() 
  print(x)

在这个文件中,MyList子类扩展了内置list类型的__getitem__索引运算方法,把索引1到N映射到实际的0到N-1。运行结果如下:

>>>  
['a', 'b', 'c'] 
['a', 'b', 'c'] 
(indexing ['a', 'b', 'c'] at 1) 

(indexing ['a', 'b', 'c'] at 3) 

['a', 'b', 'c', 'spam'] 
['spam', 'c', 'b', 'a'] 

有关另一个类型子类的例子,可以参考bool类型的实现,可以看到bool类是int的子类,有两个实例(True和False),行为就像整数1和0,但是继承了定制后的字符串表达方式来显示其变量名。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python引入不同文件夹下的自定义模块方法
Oct 27 Python
让Python脚本暂停执行的几种方法(小结)
Jul 11 Python
python实现知乎高颜值图片爬取
Aug 12 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
PYcharm 激活方法(推荐)
Mar 23 Python
python print 格式化输出,动态指定长度的实现
Apr 12 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
python脚本定时发送邮件
Dec 22 Python
python模块内置属性概念及实例
Feb 18 Python
详解Python openpyxl库的基本应用
Feb 26 Python
方法汇总:Python 安装第三方库常用
Apr 26 Python
python函数式编程学习之yield表达式形式详解
Mar 25 #Python
Python实现简单求解给定整数的质因数算法示例
Mar 25 #Python
python实现隐马尔科夫模型HMM
Mar 25 #Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 #Python
Python实现修改文件内容的方法分析
Mar 25 #Python
利用python为运维人员写一个监控脚本
Mar 25 #Python
python实现数据写入excel表格
Mar 25 #Python
You might like
解决File size limit exceeded 错误的方法
2013/06/14 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
jQuery为动态生成的select元素添加事件的方法
2016/08/29 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
记一次webapck4 配置文件无效的解决历程
2018/09/19 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
Python中字符编码简介、方法及使用建议
2015/01/08 Python
python web基础之加载静态文件实例
2018/03/20 Python
python检索特定内容的文本文件实例
2018/06/05 Python
pycharm 关掉syntax检查操作
2020/06/09 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
促销活动策划方案
2014/01/12 职场文书
《雷雨》教学反思
2014/02/20 职场文书
售后服务承诺书模板
2014/05/21 职场文书
公司总经理助理岗位职责
2014/07/09 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
群众路线领导对照材料
2014/08/23 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
见习报告的格式
2014/10/31 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python