返回顶部
首页 > 资讯 > 后端开发 > Python >课时47:魔法方法:定制序列
  • 714
分享到

课时47:魔法方法:定制序列

课时序列方法 2023-01-30 22:01:35 714人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录:  一、定制序列   二、课时47课后习题及答案   **************** 一、定制序列 **************** 本节要谈的是定制容器,要想成功的实现容器的定制,便需要先谈一谈协议。协议是什么? 协议(Prot

目录:
  一、定制序列

  二、课时47课后习题及答案

 

****************

一、定制序列

****************

本节要谈的是定制容器,要想成功的实现容器的定制,便需要先谈一谈协议。协议是什么?

协议(Protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,在python中的协议就显得不那么正式。事实上,在Python中,协议更像是一种指南。

这有点像Python极力推崇的鸭子类型【扩展阅读】鸭子类型(duck typing)

在Python中,像序列类型(如列表、元组、字符串)或映射类型(如字典)都是属于容器类型。本节来讲定制容器,那就必须先知道,定制容器有关的一些协议。

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

下表列举了定制容器类型相关的魔法方法及定义。

__len__(self)                      定义当被 len() 调用时的行为(返回容器中元素的个数)
__getitem__(self, key)                 定义获取容器中指定元素的行为,相当于 self[key]
__setitem__(self, key, value)          定义设置容器中指定元素的行为,相当于 self[key] = value
__delitem__(self, key)                 定义删除容器中指定元素的行为,相当于 del self[key]
__iter__(self)                         定义当迭代容器中的元素的行为
__reversed__(self)                     定义当被 reversed() 调用时的行为
__contains__(self, item)               定义当使用成员测试运算符(in 或 not in)时的行为

举个例子:编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数。

class CountList:
    def __init__(self, *args):
        self.values = [x for x in args]
        self.count = {}.fromkeys(range(len(self.values)), 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)
>>> c2 = CountList(2,4,6,8,10)
>>> 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}

 

*******************************

二、课时47课后习题及答案

*******************************

 

 

--结束END--

本文标题: 课时47:魔法方法:定制序列

本文链接: https://lsjlt.com/news/179395.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 课时47:魔法方法:定制序列
    目录:  一、定制序列   二、课时47课后习题及答案   **************** 一、定制序列 **************** 本节要谈的是定制容器,要想成功的实现容器的定制,便需要先谈一谈协议。协议是什么? 协议(Prot...
    99+
    2023-01-30
    课时 序列 方法
  • 课时44:魔法方法:简单定制
    目录:   一、简单定制   二、课时44课后习题及答案   **************** 一、简单定制 **************** 基本要求:1>> 定制一个计时器的类2>> start和stop方法代...
    99+
    2023-01-30
    课时 简单 方法
  • 课时49:魔法方法:生成器
    目录:   一、生成器   二、课时49课后习题及答案   ********************* 一、生成器 ********************** 生成器的学习并不涉及魔法方法,甚至它巧妙地避开了类和对象,仅通过普通地函数就...
    99+
    2023-01-30
    生成器 课时 方法
  • 课时42:魔法方法:算术运算
    目录:   一、算术运算符   二、课时41课后习题及答案    现在来讲一个新名词:工厂函数。Python2.2以后,对类和类型进行了统一,做法就是将int()、float()、str()、list()、tuple()这些BIF转换为工...
    99+
    2023-01-30
    算术 课时 方法
  • python魔法方法-自定义序列详解
    自定义序列的相关魔法方法允许我们自己创建的类拥有序列的特性,让其使用起来就像 python 的内置序列(dict,tuple,list,string等)。 如果要实现这个功能,就要遵循 python 的相关...
    99+
    2022-06-04
    自定义 序列 详解
  • 课时43:魔法方法:算术运算2
    目录:   一、反运算   二、增量赋值运算   三、一元操作符   四、课时43课后习题及答案   ************* 一、反运算 ************* 下表列举了反运算相关的魔法方法: __radd__(self, o...
    99+
    2023-01-30
    算术 课时 方法
  • 课时41:魔法方法:构造和析构
    目录:   一、_ _init_ _(self[, ...])   二、_ _new_ _(cls[, ...])   三、_ _del_ _(self)   四、课时41课后习题及答案   说的那么厉害,那什么是魔法方法呢? (1)魔法...
    99+
    2023-01-30
    课时 方法 魔法
  • 定制类和黑魔法
    定制类  反射    反射又称为自省,指的是程序可以访问、检测和修改它本身状态和行为的一种能力。python中提供了以下四个自检功能的函数。    hasattr(object, name):用来检测object(适用于类、文件、模块或对...
    99+
    2023-01-30
    黑魔法
  • php魔术方法和反序列化漏洞
    什么是反序列化漏洞? 漏洞形成的根本原因就是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、GetShell 等一系列不可控的后果。反序列化漏洞并不是...
    99+
    2023-09-10
    php android 开发语言
  • php反序列化魔术方法怎么使用
    在PHP中,反序列化是通过魔术方法__wakeup()来实现的。__wakeup()方法会在反序列化对象时自动调用。 使用魔术方法_...
    99+
    2023-10-22
    php
  • Python定制类你不知道的魔术方法
    目录Python中的魔法方法1.__str__2.__iter__3.__getitem__4.__getattr__5.__call__Python中的魔法方法 方法名说明__st...
    99+
    2024-04-02
  • php反序列化之魔术方法超详细讲解
    目录php魔术方法__construct()与__destruct()__call__get__set__isset__unset__sleep__wakeup__toString_...
    99+
    2022-11-13
    php反序列化魔术方法 php魔术方法
  • 反序列化漏洞及PHP魔法函数
    目录 1、漏洞原理 2、序列化(以PHP语言为例) 3、反序列化 4、PHP魔法函数 (1)__wakeup() (2)__destruct() (3)__construct() (4)__toString() (5)__get() (6)...
    99+
    2023-08-31
    php PHP魔法函数 序列化 反序列化漏洞 安全
  • Pandas中时间序列的处理方法
    这篇文章主要为大家展示了“Pandas中时间序列的处理方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Pandas中时间序列的处理方法”这篇文章吧。一、时间序列数据的生成pd.date_ran...
    99+
    2023-06-15
  • python魔法方法-属性访问控制详解
    属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: •__getattr__(self, item) 定义当访问不存...
    99+
    2022-06-04
    详解 访问控制 属性
  • Redis中怎么自定义序列化方法
    在Redis中,可以通过自定义序列化方法来对存储的数据进行序列化和反序列化。一种常见的方式是使用JSON格式来进行序列化,可以通过以...
    99+
    2024-04-29
    Redis
  • python 随时间序列变动画图的方法
    画这种图要考虑两点: 1.如何生成连续的时间轴 2.如何在图中适当的显示轴标签的样式和数量。 import matplotlib.pyplot as plt import matp...
    99+
    2024-04-02
  • 自定义Go Json的序列化方法译文
    编译自 Custom JSON Marshalling in Go。 前言 我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:"...
    99+
    2024-04-02
  • spring-session自定义序列化方法是什么
    本篇内容介绍了“spring-session自定义序列化方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!spring-session...
    99+
    2023-06-22
  • 如何自定义Go Json的序列化方法
    这篇文章主要讲解了“如何自定义Go Json的序列化方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何自定义Go Json的序列化方法”吧!我们知道,通过tag,可以...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作