Python魔法之__getitem__

上篇文章探讨了__call__魔法方法,这里探讨__getitem__的奇妙之处。

Python中的对象分为可迭代对象与不可迭代对象,那么什么是可迭代对象呢?

可以这样简单地说,可以使用for i in obj进行遍历的对象均为可迭代对象,不能用for i in obj进行遍历的就是不可迭代对象。

因此range(n)、list、tuple、str、dict等均为可迭代对象,而int、float与一般的函数对象、类对象等是不可迭代对象。

可迭代对象之所以可迭代,就是因为内部实现了__iter____getitem__魔法方法

  1. 如果不定义__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
    
  2. 定义__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__相关推荐

  1. python 魔法方法之:__getitem__ __setitem__ __delitem__

    python的魔法方法: 在Python中,如果我们想实现创建类似于序列和映射的类,可以通过重写魔法方法__getitem__.__setitem__.__delitem__.__len__方法去模拟 ...

  2. exit函数_全面深入了解 Python 魔法函数

    (点击上方公众号,可快速关注一起学Python) 作者:浪子燕青       链接: http://www.langzi.fun/Python魔法函数.html 魔法函数概念 魔法函数是以双下划线开头 ...

  3. python 魔法函数 __add___PythonI/O进阶学习笔记_2.魔法函数

    前言: 本文一切观点和测试代码是在python3的基础上. Content: 1.什么是魔法函数,魔法函数__getitem__在python中应用. 2.python的数据模型和数据模型这种设计对p ...

  4. python 魔法方法常用_Python魔法方法指南

    有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...

  5. python魔法方法长文详解

    python魔法方法详解 1. 什么是魔法方法 魔法方式(Magic methods)是python的内置函数,一般以双下划线开头和结尾,比如__add__,__new__等.每个魔法方法都有对应的一 ...

  6. Python 魔法方法详解

    什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现.魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作 ...

  7. python 魔法方法诠释

    什么是Python魔法方法 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是两个下划线包围来命名的(比如 ini ...

  8. 一文读懂什么是Python魔法函数

    一文读懂什么是Python魔法函数 Python的魔法函数是指Python的类中,一系列函数名由双下划线包裹的函数. 笔者最初接触到魔法函数的使用是在Pytorch中,在Pytorch中的Datase ...

  9. Python魔法方法

    文章目录 Python魔法方法 一. 概述 1. 魔法方法 2. 常用的魔法方法 二. 构造方法 1. `__new__` 2. `__init__` 3. `__del__` 三. 操作符 1. 简 ...

最新文章

  1. golang中的strings.Compare
  2. php 字符串的比较大小,PHP如何比较字符串的大小?
  3. 巧用句柄函数:闪烁窗体,做提示功能时很有用哦
  4. 【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析
  5. 【数据结构】量子危机
  6. 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放
  7. leetcode题解206-反转链表
  8. .net开发中常用的第三方组件
  9. Enterprise Library 中加密数据库连接字符串
  10. python 多分类 recall_sklearn多分类问题
  11. 国内主要的ubuntu 源
  12. 信鸽 ios tag推送 php,信鸽推送(iOS)踩过的坑
  13. 遥感影像识别-训练策略
  14. OpenSSH私钥BEGIN OPENSSH PRIVATE KEY与BEGIN RSA PRIVATE KEY格式转换方式
  15. 安全漏洞之host头攻击漏洞
  16. QQ空间花匠免费代码
  17. android 检查更新 卡住,阴阳师安装更新包卡住怎么办_安装更新包卡住解决办法...
  18. 人,羊,狼,菜过河问题的计算机编程实现的matlab程序,人狼羊菜渡河问题(含Matlab程序)...
  19. confusion_matrix
  20. centos7安装大数据平台

热门文章

  1. iOS 结构体和类的区别
  2. flutter闪烁动画效果
  3. mysql服务一直删除不了了_Windows下MySQL服务无法停止和删除的解决办法
  4. java rowmapper 通用实现_将每行映射为MAP对象的RowMapper实现
  5. ensp两台路由器不同网段相互访问
  6. Fikker 站长缓存的授权期内但显示授权过期问题
  7. Rootkit---进程隐藏
  8. 关于 Excel 2003 vba usedrange属性
  9. 荣耀6手机升级android版本,华为荣耀6手机升级开发版本退回到稳定版的方法
  10. QAxObject操作excel