python使用魔法函数创建可切片类型
#!/usr/bin/env python
# -*- coding: utf-8 -*- """
可切片的对象
""" import numbers class sliceObject:
def __init__(self, students):
self.students = students def __reversed__(self):
pass def __getitem__(self, item):
"""
实现对象可切片这个魔法函数很关键
:param item: 当传递是切片方式比如[:2]这种,item是一个slice对象,如果传递是[2]整数则是Integral对象。
:return:
"""
cls = type(self) # 获取当前对象的类
if isinstance(item, slice): # item的不同类型返回不同的东西
return cls(students=self.students[item]) # 同样返回可切片的对象而且是sliceObject类这个对象
elif isinstance(item, numbers.Integral): # 如果是整形则返回单一一个对象
return cls(students=[self.students[item]]) # 迭代器
def __iter__(self):
return iter(self.students) # 获取长度
def __len__(self):
return len(self.students) # 判断是否存在
def __contains__(self, item):
if item in self.students:
return True
else:
return False students = ["Tom", "Lucy", "Lili"]
so = sliceObject(students=students)
# 这种用法通过 __getitem__ 实现
a = so[:2]
print(a) # 这种用法通过 __len__ 实现
print(len(so)) # 这种用法就通过 __contains__ 实现
if "Tom" in so:
print("存在") # 这种用法通过 __iter__ 实现
for student in so:
print(student)
实现这个效果的重要点就是魔法函数还有就是传递进去的列表对象
python使用魔法函数创建可切片类型的更多相关文章
- gj3 Python数据模型(魔法函数)
3.1 什么是魔法函数 类里面,实现某些特性的内置函数,类似 def __xx__(): 的形式. 不要自己定义XX,并不是和某个类挂钩的 class Company(object): def __i ...
- Python的魔法函数系列 __getattrbute__和__getattr__
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys __metaclass__ = type """ _ ...
- 16个python常用魔法函数
==,is的使用 ·is是比较两个引用是否指向了同一个对象(引用比较). ·==是比较两个对象是否相等 1.__ init__(): 所有类的超类object,有一个默认包含pass的__ init ...
- python常用魔法函数
1.__init__(): 所有类的超类object,有一个默认包含pass的__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对 ...
- Python的魔法函数
概要 如何定义一个类 类里通常包含什么 各个部分解释 类是怎么来的 type和object的关系 判断对象的类型 上下文管理器 类结构 #!/usr/bin/env python # -*- codi ...
- Python的魔法函数之 - __len__,__getitem__,__setitem__,__delitem__
# 对象作为len()函数的参数是必须实现该方法 __len__ # 使用类似字典方式访问成员时必须实现 dic['pro_name'] __getitem__ # 使用类似字典方式设置成员时必须实现 ...
- python使用range()函数创建数字列表list
#!/usr/bin/python #coding=utf-8 #好好学习,天天向上 numbers=list(range(1,6)) print(numbers) range指定步长: #!/usr ...
- Python魔法函数与两比特量子系统模拟
技术背景 本文主要涵盖两个领域的知识点:python的魔法函数和量子计算模拟,我们可以通过一个实际的案例来先审视一下这两个需求是如何被结合起来的. 量子计算模拟背景 ProjectQ是一个非常优雅的开 ...
- PythonI/O进阶学习笔记_2.魔法函数
前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...
随机推荐
- DB2DB 一年多以来的重大更新
由于工作的原因,所以和 DB2DB 有较多的接触.但由于之前的版本一直能满足工作上的需要,所以直到最近才更新为最新版本,而总结了新版本的更新历史后,发现 DB2DB 一年多以来包括了以下重大的更新: ...
- BZOJ_3144_[Hnoi2013]切糕_最小割
BZOJ_3144_[Hnoi2013]切糕_最小割 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R ...
- 从Java继承类的重名static函数浅谈解析调用与分派
在java中,static成员函数是否可以被重写呢? 结论是,你可以在子类中重写一个static函数,但是这个函数并不能像正常的非static函数那样运行. 也就是说,虽然你可以定义一个重写函数,但是 ...
- WebService-----Xfire
Xfire相对Axis2 个人感觉相对简单一点,因为myEclipse上可以自动生成.而且在目前来讲,Xfire也是更受欢迎一点. 首先说明Xfire所用jar包:http://download.cs ...
- 循环table 示例
1.循环table里的某一列 //当前第三列 //注:索引从1开始 $("#tabcardno tr td:nth-child(3)").each(function () { va ...
- sql server 任务调度与CPU
一. 概述 我们知道在操作系统看来, sql server产品与其它应用程序一样,没有特别对待.但内存,硬盘,cpu又是数据库系统最重要的核心资源,所以在sql server 2005及以后出现了SQ ...
- 《HelloGitHub》第 37 期
公告 欢迎熟悉 C# 热爱开源的小伙伴加入我们,点此联系我 <HelloGitHub>第 37 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub ...
- 执行Python程序的两种方式
目录 交互式(了解) 命令行式(了解) Python执行程序的三个阶段(掌握) 交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口 ...
- Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-2.xml, reason:
http://blog.csdn.net/gyming/article/details/8168166/ 最近接受的这个项目需要Android SDK Tools revision 22.6.2 or ...
- python中线程和进程(二)
目录 线程同步 Event Lock RLock Condition Barrier semaphore GIL 线程同步 线程同步,即线程之间协同工作,一个线程访问某些数据时,其他线程不能访问这些数 ...