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中,有的名称会在前面和后面加上两个下划线,由这些名字组成的集合所包含的方法称为魔法方法(或者是特殊方法).如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名 ...
随机推荐
- 2018-8-10-wpf-单例
title author date CreateTime categories wpf 单例 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17:23:3 + ...
- redis的密码设置
若连接redis时报错:Redis (error) NOAUTH Authentication required.,通常是由于redis设了密码但连接时却未提供密码引起的. 设置密码: 编辑redis ...
- JAVA二分插入排序
- vue 父子组件数据双向绑定
父组件 <find-search v-model="searchshow"></find-search> 子组件 props: { value: { typ ...
- win10配置jdk环境变量及遇到的坑
第一步.在系统变量中新增变量命名JAVA_HOME,值为jdk的安装目录 JAVA_HOME C:\Program Files\Java\jdk1.8.0_231 第二步.在系统变量中增加path的值 ...
- Java中的内部类怎么用
一.为什么需要内部类?java内部类有什么好处?为什么需要内部类? 首先举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参数相同,你应该怎么办?这时 ...
- leetcode-168周赛-1298-你能从盒子中获得的最大糖果数
题目描述: 方法一:bfs class Solution: def maxCandies(self, status: List[int], candies: List[int], keys: List ...
- Android中自己定义一个shade.xml
自己定义一个shade: <shape> <!-- 实心 --> <solid android:color="#ff9d77"/> <!- ...
- Android Studio androidx 包冲突解决方法
如果包冲突了会包如下这样的错: Android dependency 'androidx.core:core' has different version for the compile (1.0.0 ...
- python 一些特殊用法和坑
https://github.com/leisurelicht/wtfpython-cn