容器类型的协议

  • 希望容器不可变,则只需定义__len_()和__getitem_()方法
  • 如果希望容器可变,除了上面两个,还需要__setitem_()和__delitem_()两个方法
    编写一个不可改变的自定义列表,要求记录下列表中每个元素被访问的次数,代码如下
class CountList():def __init__(self, *args):self.value = [x for x in args] #x for x in args返回值是由for子句之后的表达式得到的元素组成的链表self.count = {}.fromkeys(range(len(self.value)), 0)def __len__(self):return len(self.value)def __getitem__(self, key):self.count[key] += 1return self.value[key]c1 = CountList(1, 2, 3, 4)
c2 = CountList(5, 6, 7, 8)
print(c1[1])
print(c1[1])
print(c2[1])
print(c1[3])
print(c2[0])
print(c1.count)
print(c2.count)
2
2
6
4
5
{0: 0, 1: 2, 2: 0, 3: 1}
{0: 1, 1: 1, 2: 0, 3: 0}

Python 字典(Dictionary) fromkeys()方法:

https://www.runoob.com/python/att-dictionary-fromkeys.html

python入门——P47魔法方法:定制序列相关推荐

  1. python入门——P41魔法方法:构造和析构

    魔法方法总是被双下划线包围 魔法方法是面向对象Python的一切 魔法方法的强大,体现在他们总能在合适的时候自动调用 __init__(self[, -]) 在实例被构造初始就需要属性,对一个对象进行 ...

  2. python入门——P48魔法方法:迭代器

    迭代 上一次的输出,作为下一次的输入,返回自身,代码如下 dic = {"00":"a", "01":"b", &quo ...

  3. python入门——P45魔法方法:属性访问

    下面是通过property访问属性的用法 class C():def __init__(self, size=10):self.size = sizedef getsize(self):return ...

  4. python入门——P43魔法方法:算数运算2

    改写魔法方法,下发代码把int类的加减进行了互换 class New_num(int):def __add__(self, other):return int.__sub__(self, other) ...

  5. python入门——P42魔法方法:算数运算1

    下面是算数运算的一些魔法方法 我们接下来可以做个小改变 class New_num(int):def __add__(self, other):return int.__sub__(self, oth ...

  6. python入门——P44魔法方法:简单定制

    写个计时器的类 import time as t class Mytimer():def __init__(self):self.unit = ["year", "mou ...

  7. python入门——P46魔法方法:描述符(Property的原理)

    描述符 描述符就是将某种特殊类型的类的实例,指派给另一个类的属性. 特殊类型: __get_(self, instance, owner) 用于访问属性,返回属性的值 __set_(self, ins ...

  8. 刻意练习:Python基础 -- Task11. 魔法方法

    背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...

  9. python深度讲解_《深度剖析CPython解释器》21. Python类机制的深度解析(第五部分): 全方位介绍Python中的魔法方法,一网打尽...

    楔子 下面我们来看一下Python中的魔法方法,我们知道Python将操作符都抽象成了一个魔法方法(magic method),实例对象进行操作时,实际上会调用魔法方法.也正因为如此,numpy才得以 ...

最新文章

  1. 智慧少年队显示服务器异常,六大智慧少年是什么梗,六大智慧少年其它五个
  2. JAVA统计字母、数字个数
  3. window.setTimeout() 和window.setInterval() 使用说明
  4. Java 使用 endorsed 覆盖jdk提供的类
  5. JVM之常用基础参数详解
  6. 前端学习(1347):用户的增删改查操作4修改
  7. thinkphp3.2.3在nginx环境下“__PUBLIC__“路径错误、URL跳转路径错误解决方案
  8. 博客迁移到github
  9. Form.close与Application.Exit()的区别
  10. 一个关于指针+记录数据类型的使用技巧
  11. 编程规范 —— 变量的命名
  12. go语言项目实战1:-正则表达式,文件读取的综合使用
  13. 【分布式事务系列二】Spring事务管理器PlatformTransactionManager
  14. Python3网络爬虫(三):漫画下载,动态加载、反爬虫这都不叫事!
  15. 搜狗输入法安装上问题
  16. Arduino之oled屏幕使用
  17. element的事件想要传输额外的参数
  18. Linux查看历史命令 history
  19. 关于数据存储的三道面试题,你会吗?
  20. 4K电视与4K显示器的选择

热门文章

  1. SpringMvc-HandlerMapping/RequestCondition
  2. JavaSE12:集合简单总结
  3. 华为数据之道_DT|华为数据之道,怕你学不会,这次干脆出了本书
  4. 非功能性需求_更好的开卡,来聊聊非功能性需求
  5. 无法使用带括号的初始值设定项初始化数组_leetcode32. 最长有效括号
  6. Unity中使用gRPC
  7. jQuery--基本选择器
  8. 【nodejs】让nodejs像后端mvc框架(asp.net mvc)一orm篇【如EF般丝滑】typeorm介绍(8/8)...
  9. 解决Qt-至少需要一个有效且已启用的储存库 问题
  10. 02_Storm集群部署