zoukankan      html  css  js  c++  java
  • Python定制容器

    Python 中,像序列类型(如列表、元祖、字符串)或映射类型(如字典)都是属于容器类型,容器是可定制的。要想成功地实现容器的定制,我们需要先谈一谈协议。协议是什么呢?协议(Protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在 Python 中的协议就显得不那么正式。事实上,在 Python 中,协议更像是一种指南。定制容器,那我们就必须要知道,定制容器有关的一些协议:Python魔法方法详解

    1. 如果说你希望定制的容器是不可变的话,你只需要定义 __len__() 和 __getitem__() 方法。

    2. 如果你希望定制的容器是可变的话,除了 __len__() 和 __getitem__() 方法,你还需要定义 __setitem__() 和 __delitem__() 两个方法。

    class CountList:
        def __init__(self, *args):
            self.values = [x for x in args]
            print(self.values)
            self.count = {}.fromkeys(range(len(self.values)),0)  # 初始化一个字典,其键值为0到所传入参数个数减去1,且每个键的值默认为0,意思就是默认每个定制容器对象中的元素都没有被访问
        def __len__(self):
            return len(self.values)
        def __getitem__(self, key):
            self.count[key] += 1  # 定制对象中的元素每被访问一次就记录一次
            return self.values[key]
    
    >>> c1 = CountList(1,3,5,7,9)
    [1, 3, 5, 7, 9]
    >>> c2 = CountList(2,4,6,8,10)
    [2, 4, 6, 8, 10]
    >>> c1.count
    {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
    >>> len(c1.count)
    5
    >>> c1[1]
    3
    >>> c2[1]
    4
    >>> c1[1]+c2[1]
    7
    >>> c1.count
    {0: 0, 1: 2, 2: 0, 3: 0, 4: 0}
    >>> c2.count
    {0: 0, 1: 2, 2: 0, 3: 0, 4: 0}
    >>> 
  • 相关阅读:
    Linux-Bond-Configure
    Kvm学习文档记录
    Can't locate Log/Dispatch.pm in @INC
    sas2ircu工具信息收集及磁盘定位
    python 之tornado 入门
    zabbix 监控 tomcat jmx
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/paomaliuju/p/5143615.html
Copyright © 2011-2022 走看看