python基础 __getitem__
读源码的时候看到了一些不太熟悉的方法,网上了解的时候有的看起来说清楚了,有的纯粹恶心人,自己写了两个例子再对照着看了一下,记录一下
以前学的是java,在java里面所有的对象都是默认继承自object类的,所以默认可以使用和重写一些父类方法,这些方法的作用不是调用,而是在特定情况下显现,比如print的时候
在python里面也有类似的方法,__getitem__就是这一类
import numpy as np
class temp:def __init__(self, i):self.id = np.arange(i)def __getitem__(self, index):i = self.id[index]return idef greeting(self):print("Hello", self.id)
这里greeting就是一个调用的方法,也是初学的时候最常用的写法
然后__getitem__则是在迭代的时候才会发挥作用
t = temp(9)
t
output:<__main\__.temp at 0x1938accef70>
这里直接放上t返回的是新建的这个对象的地址
for i in t:print(i)
output:0 1 2 3 4 5 6 7 8
对对象t进行迭代的时候调用了__getitem__
如果删掉该方法则会报错:
'temp' object is not iterable
判断后发现,在加上__getitem__方法后,相当于将类变成了一个iterable类,即类似于数组,可以取其中某一项可以用循环迭代的类,具体如何取,则是调用__getitem__方法来判断
如果没有写return,也可以迭代但是会默认返回None
迭代的次数也是__getitem__来决定,如果在方法体里以数组的方法获取值,那么无法获取值的时候就会停止,但是如果写成print(“Hello”),就会无限循环
展示几个错误示范
class temp:def __init__(self, i):self.id = np.arange(i)def __getitem__(self, index):i = self.id[index]def __len__(self):return self.id
使用这个类进行迭代会返回i个None
class temp3:def __init__(self, i):self.id = np.arange(i)def __getitem__(self, index):print("Hello")def __len__(self):return self.id
使用这个会无限打印Hello
python基础 __getitem__相关推荐
- 刻意练习:Python基础 -- Task11. 魔法方法
背景 我们准备利用17天时间,将 "Python基础的刻意练习" 分为如下任务: Task01:变量.运算符与数据类型(1day) Task02:条件与循环(1day) Task0 ...
- Python之路【第二篇】:Python基础(一)
Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1: name ...
- Python基础入门笔记(二)
前言 本文主要为 Python基础入门笔记(一)内容的补充. 一.迭代器和生成器 1.1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元 ...
- python包括哪些部分_第一部分 Python基础篇
第⼀一部分 Python基础篇 1. 为什什么学习Python? 朋友推荐,比较简单易学,生态圈比较强大 发展趋势:人工智能.数据分析 2. 通过什什么途径学习的Python? 廖雪峰.网络博客.相关 ...
- Python基础总结之常用内置方法总结
文章目录 前言 1.str 1.1.内置方法: 1.2.常用的内置方法 1.3.String模块的一些方法 2.list 2.1.内置方法 2.2.常用内置方法 3.tupple 3.1.内置方法 3 ...
- Python基础(八)--迭代,生成器,装饰器与元类
目录 Python基础(八)--迭代,生成器,装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2. ...
- python代码大全和用法用量_python零基础入门命令方式汇总大全,快速恶补你的Python基础...
原标题:python零基础入门命令方式汇总大全,快速恶补你的Python基础 无意中浏览到这篇来自大牛的分享,总结的很全面,我重新排版下放在这里,希望能帮助到大家.在此十分感谢原作者! 在开始之前还是 ...
- Python基础-高级变量类型
Python基础-高级变量类型 1.高级变量类型 """ 数值型:int float bool compex 非数值型:str list set dict tuple & ...
- Python基础-循环
Python基础-循环 1.while 循环 #str = '媳妇儿,我错了'# 1.定义循环变量初始值 # index = 0 # # 2.循环 # while index<10000: # ...
最新文章
- 我们已经不用AOP做操作日志了!
- #pragma once 是什么意思?
- linux 修改时区_如何在 Ubuntu 20.04 上设置或者修改时区
- userAgent,JS用户代理检测——判断浏览器内核、浏览器、浏览器平台、windows操作系统版本、移动设备、游戏系统
- [ARM-assembly]-ARM交叉编译器下编译的各个镜像的反汇编文件分析
- 【数据结构与算法】之深入解析“随机翻转矩阵”的求解思路与算法示例
- 2021博客之星,请帮忙投上宝贵一票
- 详解ScheduledExecutorService的周期性执行方法
- halcon gen_region_hline 绘制霍夫变换提取直线
- client中周期性边界_「微评」增加艺术品在投资组合中的比例 推进国家艺术软实力...
- zsh of kali
- 58同城 | Embedding技术在房产推荐中的应用
- Linux使用Wget实现整站下载
- win10安装无法创建新分区也找不到现有分区问题
- 东方财富股吧评论爬虫和情绪分析
- 软考中项第三章 信息系统集成专业知识
- go build在mac系统下生成可执行文件时隐藏终端
- [backtrack教程]从零开始,教你如何破解WEP、WPA无线网络
- 网易云项目(Vue)
- Alist常用样式代码