python基础第9章 魔法方法、属性和迭代器(一)
__getitem__和__setitem__:
这个方法返回与指定键想关联的值。对序列来说,键应该是0~n-1的整数,其中n为序列的长度。对映射来说,键可以是任何类型。
class A :
__getitem__:
print(x)
实例化 a = A(),则a[y]就会调用这个方法
def checkIndex(key):
"""
所给的键是能接受索引吗? 为了能被接受,键应该是一个非负的整数。如果她不是一个整数,会引发TypeError;
如果他是负数,则会引发IndexError(因为序列是无限长的)
"""
if not isinstance(key, (str,int)):raise TypeError
if key < 0:raise IndexError class ArithmeticSequence:
def __init__(self, start=0, step=1):
"""
初始化算术序列 起始值-序列中的第一个值
步长-两个相邻之间的差别
改变-用户修改值的字典
"""
self.start = start #保存开始值
self.step =step #保存步长值
self.changed = {} #没有项被修改
def __getitem__(self,key):
"""
Get an item from the arithmetic sequence,
这个方法在使用是x[key]模式时会被触发,
"""
checkIndex(key) try:
return self.changed[key] #修改了吗
except KeyError: #否则
return self.start + key*self.step #...计算值
def __setitem__(self, key, value):
"""
修改算术序列中的一个项
这个方法在x[key]=时候被触发
"""
checkIndex(key) self.changed[key] = value # 保存修改后的值
'''
总结:
1、魔法方法python内嵌实现特定功能的
2、魔法方法的触发不是常规触发,而是特殊的动作,如__init__是类初始化时触发,而上述是在直接[key]引用或者赋值时是触发
'''
python基础第9章 魔法方法、属性和迭代器(一)的更多相关文章
- python基础关键词触发的魔法方法
		
with: __enter__ __exit__ dic={} 获取容器中指定元素的行为 dic["name"] = "egon" #设置值 __setitem ...
 - 【python学习笔记】9.魔法方法、属性和迭代器
		
[python学习笔记]9.魔法方法.属性和迭代器 魔法方法:xx, 收尾各有两个下划线的方法 __init__(self): 构造方法,创建对象时候自动执行,可以为其增加参数, 父类构造方法不会被自 ...
 - python基础之序列类型的方法——字符串方法
		
python基础之序列类型的方法--字符串方法 Hello大家好,我是python学习者小杨同学,经过一段时间的沉淀(其实是偷懒不想更新),我终于想起了自己的博客账号,所以这次带来的是序列方法的后半部 ...
 - 《Python基础教程(第二版)》学习笔记 -> 第九章 魔法方法、属性和迭代器
		
准备工作 >>> class NewStyle(object): more_code_here >>> class OldStyle: more_code_here ...
 - 《Python基础教程》 读书笔记 第九章  魔法方法、属性和迭代器(上)
		
构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ... d ...
 - python魔法方法-属性访问控制
		
属性访问控制 所谓的属性访问控制就是控制点号访问属性的行为,而且不仅是类的外部,连类的内部也受控制,代码见真章,边看代码边解释: __getattr__(self, item) 定义当访问不存在的属性 ...
 - python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题
		
1. 重写一般方法和特殊的构造方法 1.1 如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么会去它的超类A里面找. class A: ... def hello ...
 - python基础学习笔记5--对象方法、属性和迭代器
		
对象方法.属性和迭代器 1.构造方法 1)构造方法和一般方法的不同点:当一个对象被创建后,会立即调用构造方法. 2)在Python中创建一个构造方法很容易,只要把init方法的名字从简单的init修改 ...
 - python学习笔记之七:魔法方法,属性
		
在python中,有的名称会在前面和后面加上两个下划线,由这些名字组成的集合所包含的方法称为魔法方法(或者是特殊方法).如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名 ...
 
随机推荐
- swat - 基于web的samba管理工具
			
总览 swat [ -s smb config file ] [ -a ] 描述 此程序是 samba 套件的一部分. swat 允许 samba 管理员通过web浏览器配置复杂的 smb.conf ...
 - KiCAD实用操作
			
KiCAD实用操作之一:自动编辑线宽 今天偶然间发现的一个比较实用的功能,算是KiCAD的一个优点吧(或许是在AD上面没发现):当整个PCB布完线或者在布线过程中,我们有可能需要对某个线的宽度进行调整 ...
 - 解决虚拟机克隆的linux系统ip无法正常使用问题
			
当我们克隆centos虚拟机无法正常获取IP地址,重启网卡也提示Bringing up interface eth0: Device eth0 does not seem to be present ...
 - sysprep
			
今天做虚拟机模板,以及克隆.单纯的克隆会造成很多冲突问题的产生,所以在这里,windows自带的sysprep功能很好的解决了这一点. 路径位于:C:\Windows\System32\Sysprep ...
 - 【LeetCode】Stack
			
[503] Next Greater Element II [Medium] 给一个循环数组,找到离当前元素最近的比它大的元素. Input: [1,2,1] Output: [2,-1,2] Exp ...
 - CSS 是怎样确定图像大小的?
			
本文转自奇舞周刊学习使用侵权删 先来看个例子,热热身. 上面这张图像的原始尺寸是:宽 54px 高 49px. 那么,在以下代码中,每张图像显示的最终尺寸是多少? https://p1.ssl.qhi ...
 - Eclipse快速生成一个JavaBean类的方法
			
原文: https://jingyan.baidu.com/article/948f5924156866d80ff5f921.html Eclipse快速生成一个JavaBean类的方法 听语音 | ...
 - loj2573[TJOI2018]数字计算
			
题意:操作1:x=x*m,输出x%mod.2.x/=map[m].m即第m次操作,保证该次操作为1操作,并且每个操作最多只会被删一次.q<=1e5. 线段树维护操作信息的乘积,删除把对应位置的权 ...
 - tengine日志切割-配置分钟级别日志自动切割
			
tengine日志切割-配置分钟级别日志自动切割 安装 以安装最新版本的tengine-2.1.2版本 下载连接 tengine支持许多变量 变量 $conn_requests 当前请求在长连接上的序 ...
 - 58. jdk1.5新特性之静态导入
			
jdk1.5新特性之--------静态导入 作用:简化书写(在我们使用静态方法的时候要用 类名.方法名的方式调用.而用静态导入只需要写方法名就可以调用) 语法: 1.作用于一个方法: ...