python扩展内置类型

1 python扩展内置类型

python类可用于扩展内置类型,支持更复杂的数据结构。

1.1 通过嵌入扩展类型

python通过定义一个集合类实例化集合对象,定义交集、并集方法,重载运算符,来扩展一个内置类型。比如,包装一个列表。

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)
    def union(self,other):
        res=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):return len(self.data)
    def __getitem__(self,key):return self.data[key]
    def __and__(self,other):return self.intersect(other)
    def __or__(self,other):return self.union(other)
    def __repr__(self):return 'Set:'+repr(self.data)

在idle执行下面语句

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> from setwrapper import *
>>> s=Set([1,3,5,7])
>>> print(s.intersect([3,5,9]))
Set:[3, 5]
>>> print(s.union([3,5,9]))
Set:[1, 3, 5, 7, 9]
>>> print(s|Set([1,2,3]))
Set:[1, 3, 5, 7, 2]

1.2 通过子类扩展类型

python通过继承内置类型来扩展指定类型达到定制的效果。

比如,继承列表list,修改下标从1开始。

typesubclass.py

class MyList(list):
    def __getitem__(self,offset):
        print('(indexing {0} at {1})'.format(self,offset))
        return list.__getitem__(self,offset-1)

在idle执行下面语句

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> print(list('梯阅线条'))
['梯', '阅', '线', '条']
>>> from typesubclass import *
>>> ml=MyList('梯阅线条')
>>> print(ml)
['梯', '阅', '线', '条']
>>> print(ml[1])
(indexing ['梯', '阅', '线', '条'] at 1)>>> print(ml[3])
(indexing ['梯', '阅', '线', '条'] at 3)
线
>>> ml.append('t')
>>> print(ml)
['梯', '阅', '线', '条', 't']
>>> ml.reverse()
>>> print(ml)
['t', '条', '线', '阅', '梯']

setsubclass.py

class Set(list):
    def __init__(self,value=[]):
        list.__init__([])
        self.concat(value)
        
    def intersect(self,other):
        res=[]
        for x in other:
            res.append(x)
        return res
        
    def union(self,other):
        res=Set(self)
        res.concat(other)
        return res
        
    def concat(self,value):
        for x in value:
            if not x in self:
                self.append(x)
                
    def __and__(self,other):return self.intersect(other)
    def __or__(self,other):return self.union(other)
    def __repr__(self):return 'Set:'+list.__repr__(self)

在idle执行下面语句

>>> import os
>>> os.chdir(r'E:\documents\F盘')
>>> from setsubclass import *
>>> s1=Set([1,3,5,7])
>>> s2=Set([1,2,5,6,8])
>>> s1;s2;len(s1)
Set:[1, 3, 5, 7]
Set:[1, 2, 5, 6, 8]
4
>>> s1.intersect(s2)
[1, 2, 5, 6, 8]
>>> s1.union(s2)
Set:[1, 3, 5, 7, 2, 6, 8]
>>> s1|s2;s1&s2
Set:[1, 3, 5, 7, 2, 6, 8]
[1, 2, 5, 6, 8]
>>> s1.reverse()
>>> print(s1)
Set:[7, 5, 3, 1]

相关推荐

  1. python扩展类型

    2023-12-11 22:52:03       39 阅读
  2. Python数据类型等入门语(句)法

    2023-12-11 22:52:03       35 阅读
  3. python数据类型方法(部分明天补充)

    2023-12-11 22:52:03       14 阅读
  4. Python 函数

    2023-12-11 22:52:03       18 阅读
  5. 详解Python函数 !!!

    2023-12-11 22:52:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 22:52:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 22:52:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 22:52:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 22:52:03       20 阅读

热门阅读

  1. Vmware突然无法获取IP

    2023-12-11 22:52:03       37 阅读
  2. DataFrame 索引最后一列数据 Python

    2023-12-11 22:52:03       31 阅读
  3. 蓝牙配对、连接和删除汇总

    2023-12-11 22:52:03       39 阅读
  4. 这是第一篇文章 试试水

    2023-12-11 22:52:03       41 阅读
  5. 80个常用shell命令及简单用法

    2023-12-11 22:52:03       38 阅读
  6. 如何理解冲突域和广播域

    2023-12-11 22:52:03       49 阅读
  7. [ERROR] 不再支持源选项 6

    2023-12-11 22:52:03       38 阅读
  8. vim常用键位总结

    2023-12-11 22:52:03       34 阅读
  9. 【Android】使用Netty库来实现Socket接收

    2023-12-11 22:52:03       43 阅读
  10. Android Kotlin 泛型:强大的类型抽象和重用利器

    2023-12-11 22:52:03       39 阅读
  11. Android 依据Build相关信息判断机型

    2023-12-11 22:52:03       39 阅读
  12. CF1898B Milena and Admirer(贪心)

    2023-12-11 22:52:03       45 阅读
  13. Mybatis进阶知识

    2023-12-11 22:52:03       41 阅读