import numbers
class Group:
#支持切片操作
def __init__(self, group_name, company_name, staffs):
self.group_name = group_name
self.company_name = company_name
self.staffs = staffs def __reversed__(self):
self.staffs.reverse() def __getitem__(self, item): # 实现了这个魔法函数,就可以是获取类中某个可迭代元素的下标的元素,也可以使其成为一个可迭代对象
cls = type(self) # 使用相对编码,进行类型获取
if isinstance(item, slice):
return cls(group_name=self.group_name, company_name=self.company_name, staffs=self.staffs[item])
elif isinstance(item, numbers.Integral):
return cls(group_name=self.group_name, company_name=self.company_name, staffs=[self.staffs[item]]) def __len__(self):
return len(self.staffs) def __iter__(self): # 实现该魔法函数,可以使这个类成为一个可迭代的对象
return iter(self.staffs) def __contains__(self, item):
if item in self.staffs:
return True
else:
return False staffs = ["bobby1", "imooc", "bobby2", "bobby3"]
group = Group(company_name="imooc", group_name="user", staffs=staffs)
print(group[:2])
reversed(group)
for user in group:
print(user)

python 实现自定义切片类的更多相关文章

  1. PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

  2. python中面向对象元类的自定义用法

    面向对象中的常用方法 1.instance 和 issubclass instance :判断两个对象是不是一类 issubclass :判断某个类是不是另一个类的子类 #两个常用方法的使用 clas ...

  3. Python自定义线程类简单示例

    Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码     # - ...

  4. Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

    这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...

  5. Python 自定义元类的两种写法

    有关元类是什么大家自己搜索了解,我这里写一下实现元类的两种写法 # 自定义元类 #继承type class LowercaseMeta(type): ''' 修改类的属性名称为小写的元类 ''' # ...

  6. Python进阶:切片的误区与高级用法

    2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇.合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动.原系列的单篇就不删除了,毕竟也是 ...

  7. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  8. 2015/9/28 Python基础(19):类的定制和私有性

    用特殊方法定制类前面我们讲了方法的两个重要方面:首先,方法必须在调用前被绑定(到它们相应类的某个实例中):其次,有两个特殊方法可以分别作为构造器和解构器的功能,分别名为__init__()和__del ...

  9. 基于 Python 的自定义分页组件

    基于 Python 的自定义分页组件 分页是网页中经常用到的地方,所以将分页功能分出来,作为一个组件可以方便地使用. 分页实际上就是不同的 url ,通过这些 url 获取不同的数据. 业务逻辑简介 ...

随机推荐

  1. [C]副作用和序列点

    概述 副作用: <C语言核心技术>对副作用的描述: 表达式内包含了一串的常量.标识符.运算符(指示的运算方式).表达式的目的可以是获得结果值,或者得到运算的副作用(side effect) ...

  2. java.lang.IllegalStateException: getOutputStream() has already been called 解决办法

    因为在使用的时候没有使用@ResponseBody这个注解,所以才会报上面的异常

  3. Jmeter脚本录制攻略

    基于Apache JMeter(5.2.1) 首先在TestPlan里添加一个HTTP代理服务武器: 设置端口,在目标控制器里选择线程组. 在Chrome浏览器里设置代理: 点击启动按钮后,在浏览器登 ...

  4. Ubuntu16.04OPENGL初体验

    由于工作项目需要开始接触 OPENGL ,进行图像处理与可视化方面软件的开发.之前完全没有学习过相关知识,现在才知道原来有些 3D 图像是通过 OpenGL/Direct3D 等编程接口来做的. 市面 ...

  5. java自学-类与对象

    1.面向对象和面向过程 java是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想. 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为.面向对象思想就是在计算机程序设计过程中, ...

  6. ETCD:TLS

    原文地址:TLS etcd支持用于客户端到服务器以及对等方(服务器到服务器/集群)通信的自动TLS以及通过客户端证书的身份验证. 要启动并运行,首先要获得一个成员的CA证书和签名密钥对. 建议为集群中 ...

  7. maven工程指定web资源包,创建jsp文件

    进入项目的project structure. 选择web. 在右侧增加web资源包路径

  8. 缓存AJAX的请求

      在客户端缓存Ajax请求 浏览器可以缓存图片.js文件.css文件,同样浏览器也可以缓存XML Http调用(当然这需要XML Http以get方式发送调用),这种缓存基于URL,当我们发送一个请 ...

  9. C#Winform窗体利用单例子窗体传值父窗体

    简述:最近在做C#和HALCON编程,要用到单例的参数由子窗体改变父窗体的值.此例为简化版 1,点击系统设置 2,弹出子窗体,在其输入修改参数后点修改按钮 3,点击确定按钮后,关闭子窗体后,主窗体te ...

  10. [Go] go中的goto语句跳到指定标签

    比如下面的语句goto TOP ,其中TOP就是自己的自定义的标签,下面的TOP:就是要执行的代码段一般用在需要两层循环的地方,里面goto再跳回上面去 ; i < ; i++ { { goto ...