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}
    >>> 
  • 相关阅读:
    HTML5中类jQuery选择器querySelector的使用
    java发布环境时,Xshell常用的命令(基础)
    java后端:实现导出excel,按其中一个列的数据生成二维码图片,显示在列表中
    SQL 函数:case when 的用法
    微服务-学习笔记
    初学笔记:存储过程的简单概念
    初学笔记:GROUP_CONCAT 的作用,和使用条件
    jsp练习
    数据库2
    数据库
  • 原文地址:https://www.cnblogs.com/paomaliuju/p/5143615.html
Copyright © 2011-2022 走看看