Python魔法之__getitem__
Python魔法之__getitem__
上篇文章探讨了
__call__
魔法方法,这里探讨__getitem__
的奇妙之处。
Python中的对象分为可迭代对象与不可迭代对象,那么什么是可迭代对象呢?
可以这样简单地说,可以使用for i in obj
进行遍历的对象均为可迭代对象,不能用for i in obj
进行遍历的就是不可迭代对象。
因此range(n)、list、tuple、str、dict
等均为可迭代对象,而int、float
与一般的函数对象、类对象
等是不可迭代对象。
可迭代对象之所以可迭代,就是因为内部实现了__iter__
或__getitem__
魔法方法
如果不定义
__getitem__
class MyList:def __init__(self,len:int):self.list=[i for i in range(len)]self.length=lendef __repr__(self)->str:return f"MyList({self.length}):{self.list}"x=MyList(10) x[7]
结果报错,显示
MyList
不可以通过下标访问:Traceback (most recent call last):File "d:\Github-Projects\Crack_Detection_Daily\He\env.py", line 14, in <module>x[7] TypeError: 'MyList' object is not subscriptable
定义
__getitem__
后from numpy import iterable class MyList:def __init__(self, len: int):self.list = [i for i in range(len)]self.length = lendef __getitem__(self, index: int) -> int:return self.list[index]def __repr__(self) -> str:return f"MyList({self.length}):{self.list}"x = MyList(10) print(x[7]) print(x.__getitem__(7)) print(iterable(x)) print(x[7] is x.__getitem__(7)) for i in x:print(i,end=' ')
注:
numpy.iterable(x)
可以判断x是否为可迭代对象输出为:
7 7 True True 0 1 2 3 4 5 6 7 8 9
由此可见,通过
x[7]
等价于x.__getitem__(7)
,即定义了__getitem__
方法就能使该元素变为可迭代对象,可以通过下标进行访问。不仅如此,一般来说只要是可迭代对象,均有
x.__getitem__(y) <==> x[y]
,字典也不例外:dic = {'hjd': 'yyds','zyy': 'goddess' }print(dic.__getitem__('hjd')) print(dic['hjd']) print(dic['hjd'] is dic.__getitem__('hjd'))
结果:
yyds yyds True
Python魔法之__getitem__相关推荐
- python 魔法方法之:__getitem__ __setitem__ __delitem__
python的魔法方法: 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__.__setitem__.__delitem__.__len__方法去模拟 ...
- exit函数_全面深入了解 Python 魔法函数
(点击上方公众号,可快速关注一起学Python) 作者:浪子燕青 链接: http://www.langzi.fun/Python魔法函数.html 魔法函数概念 魔法函数是以双下划线开头 ...
- python 魔法函数 __add___PythonI/O进阶学习笔记_2.魔法函数
前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...
- python 魔法方法常用_Python魔法方法指南
有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...
- python魔法方法长文详解
python魔法方法详解 1. 什么是魔法方法 魔法方式(Magic methods)是python的内置函数,一般以双下划线开头和结尾,比如__add__,__new__等.每个魔法方法都有对应的一 ...
- Python 魔法方法详解
什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现.魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作 ...
- python 魔法方法诠释
什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...
- 一文读懂什么是Python魔法函数
一文读懂什么是Python魔法函数 Python的魔法函数是指Python的类中,一系列函数名由双下划线包裹的函数. 笔者最初接触到魔法函数的使用是在Pytorch中,在Pytorch中的Datase ...
- Python魔法方法
文章目录 Python魔法方法 一. 概述 1. 魔法方法 2. 常用的魔法方法 二. 构造方法 1. `__new__` 2. `__init__` 3. `__del__` 三. 操作符 1. 简 ...
最新文章
- golang中的strings.Compare
- php 字符串的比较大小,PHP如何比较字符串的大小?
- 巧用句柄函数:闪烁窗体,做提示功能时很有用哦
- 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
- 【数据结构】量子危机
- 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放
- leetcode题解206-反转链表
- .net开发中常用的第三方组件
- Enterprise Library 中加密数据库连接字符串
- python 多分类 recall_sklearn多分类问题
- 国内主要的ubuntu 源
- 信鸽 ios tag推送 php,信鸽推送(iOS)踩过的坑
- 遥感影像识别-训练策略
- OpenSSH私钥BEGIN OPENSSH PRIVATE KEY与BEGIN RSA PRIVATE KEY格式转换方式
- 安全漏洞之host头攻击漏洞
- QQ空间花匠免费代码
- android 检查更新 卡住,阴阳师安装更新包卡住怎么办_安装更新包卡住解决办法...
- 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...
- confusion_matrix
- centos7安装大数据平台