定制容器

容器类型的协议:

定制不可变容器,只需要定义__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]

>>>class CountList(list):
  def __init__(self, *args):
    super().__init__(args)
    self.count = []
    for i in args:
      self.count.append(0)
  def __len__(self):
    return len(self.count)
  def __getitem__(self, key):
    self.count[key] += 1
    return super().__getitem__(key)
  def __setitem__(self,key,value):
    self.count[key] += 1
    super().__setitem__(key,value)
  def __delitem__(self,key):
    del self.count[key]
    super().__delitem__(key)
  def counter(self,key):
    return self.count[key]
  def append(self,value):
    self.count.append(0)
    super().append(value)
  def pop(self,key):
    del self.count[key]
    return super().pop(key)
  def remove(self,value):
    key=super().index(value)
    del self.count[key]
    super().remove(value)
  def insert(self,key,value):
    self.count.insert(key,0)
    super().insert(key,value)
  def clear(self):
    self.count.clear()
    super().clear()
  def reverse(self):
    self.count.reverse()
    super().reverse()

Python笔记(二十七)_魔法方法_容器的更多相关文章

  1. Python笔记(二十六)_魔法方法_属性的魔法方法

    属性的魔法方法 __getattribute__(self,name):当该类的属性被访问时,自动触发,是最先被触发的属性方法 __setattr__(self,name,value):当一个属性被设 ...

  2. Python笔记(二十八)_魔法方法_迭代器

    迭代器用于遍历容器中的数据,但它不是容器,它是一个实现了__next__方法的对象 与迭代器相关的内置函数: iter(): 将一个对象转换成一个迭代器 next(): 访问迭代器中的下一个变量,直到 ...

  3. Python笔记(二十三)_魔法方法_字符串的魔法方法

    __str__和__repr__ 如果要把一个类的实例变成字符串,就需要实现魔法方法__str__()和__repr__ >>>class A: def name(self): re ...

  4. Python笔记(二十四)_魔法方法_运算符的魔法方法

    算数运算方法 .反运算方法 以对象A+对象B为例,都是将A作为self值,而B作为other值传入__add__(self,other)方法: 当用户输入A+B,就会调用重写的add方法: >& ...

  5. Python笔记(二十二)_魔法方法_基本魔法方法

    __init__(self[,...]) __init__和__new__组成python的构造器,但__init__更多的是负责初始化操作,相当于一个项目中的配置文件,__new__才是真正的构造函 ...

  6. Python笔记(二十五)_魔法方法_描述符

    描述符的属性方法 __get__(self, instance, owner): 用于访问属性,返回属性的值 __set__(self, instance, value): 用于给属性赋值时,返回属性 ...

  7. Python类属性访问的魔法方法

    Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- ...

  8. Python学习笔记(七)——魔法方法

    1.构造和析造 魔法方法就是被双下划线包围的方法 __init__()方法 __init__方法默认没有参数,返回值为none.类实例化对象需有明确的初始化步骤要重写函数 >>> c ...

  9. python笔记二(mysql数据库操作)

    python2.x使用MySQLdb python3.x使用pymysql代替MySQLdb 不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的. #!/usr/bin ...

随机推荐

  1. UIAlertView, UIAlertViewController

    iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController 在实现视图控制器间的过渡动画效果和自适应设备尺 ...

  2. 详解 nginx.conf 配置文件

    Nginx 配置文件主要分为 4 部分: Main 全局设置:影响其他所有设置 Server 主机设置:配置指定的主机和端口 Upstream 负载均衡服务器设置 :设置一系列的后置服务器 Locat ...

  3. grep 查找文件

    --递归查找目录下含有该字符串的所有文件 grep -rn "data_chushou_pay_info" /home/hadoop/nisj/automationDemand/ ...

  4. alex说:一切皆bytes

    一.ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示25 ...

  5. 04java基础——多态

    1.多态 1.1多态的概念 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变 ...

  6. get请求和post请求参数中文乱码的解决办法

    get请求参数中文乱码的解决办法 在tomcat的server.xml里的Connector加个URIEncoding="UTF-8",把 <Connector connec ...

  7. 常用windbg命令(转)

    1.查看版本信息:version.vertarget. 2.查看模块信息:lm.!dlls.!lmvi等. 3.调用栈:用k命令显示调用栈,用.frames命令切换栈帧. 4.内存操作:读内存用d命令 ...

  8. 使用QT创建系统托盘

    使用QT来创建一个系统托盘,事实上是一件很简单的事.为什么这么说?一是因为QT文档给出了比较详细的例子,二是QT的结构比较优雅,设计风格统一.但是在动手之前,我们要从哪里下手?虽然QT文档给出了一个比 ...

  9. MySQL---时区问题

    1.控制台输入select now();  发现与北京时间相差8小时: 2.解决: 2.1.进入MySQL客户端  mysql -uroot -p 2.2.全局,当前会话时区设置set GLOBAL ...

  10. Jion的应用