python学习高级篇(part8)--类对象的特殊方法
学习笔记,仅供参考,有错必纠
文章目录
- python 学习高级篇
- 类对象的特殊方法之`__iter__()`和`__next__()`
- 类对象的特殊方法之`__add__()`和`__radd__()`
python 学习高级篇
# 支持多行输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
类对象的特殊方法之__iter__()
和__next__()
L = [1, 2, 3, 4, 5]for item in L:print(item)
1
2
3
4
5
for-in语句在默认情况下不能用于自定义类对象的实例对象
class MyClass(object):passfor item in MyClass(): # TypeError: 'MyClass' object is not iterableprint(item)
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-2-4128e49c4e9a> in <module>()2 pass3
----> 4 for item in MyClass(): # TypeError: 'MyClass' object is not iterable5 print(item)TypeError: 'MyClass' object is not iterable
class MyClass(object):def __init__(self):self.data = 0def __iter__(self):return selfdef __next__(self):if self.data > 5:raise StopIteration()else:self.data += 1return self.datafor item in MyClass():print(item)
1
2
3
4
5
6
类对象的特殊方法之__add__()
和__radd__()
标准算术运算符在默认情况下不能用于自定义类对象的实例对象
class MyClass1(object):passclass MyClass2(object):passprint(MyClass1() + MyClass2())
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-5-eff96f1ce3ef> in <module>()5 pass6
----> 7 print(MyClass1() + MyClass2())TypeError: unsupported operand type(s) for +: 'MyClass1' and 'MyClass2'
如果想让标准算术运算符可以用于自定义类对象的实例对象,必须在自定义类对象中实现标准算术运算符对应的以下特殊方法:
之所以可以使用加法和乘法运算符操作列表,是因为列表所对应的类对象list
中实现了+
和*
对应的特殊方法;
之所以可以使用加法和乘法运算符操作字符串,是因为字符串所对应的类对象str
中实现了+
和*
对应的特殊方法。
# 测试1
class C1(object):def __add__(self, other):print("特殊方法__add__被调用")return "xxx"# return NotImplementedclass C2(object):def __radd__(self, other):print("特殊方法__radd__被调用")return "yyy"# return NotImplementedobj1 = C1()
obj2 = C2()print(obj1 + obj2)
特殊方法__add__被调用
xxx
# 测试2
class C1(object):passclass C2(object):def __radd__(self, other):print("特殊方法__radd__被调用")return "yyy"# return NotImplementedobj1 = C1()
obj2 = C2()print(obj1 + obj2)
特殊方法__radd__被调用
yyy
# 测试3
class C1(object):def __add__(self, other):print("特殊方法__add__被调用")return NotImplementedclass C2(object):def __radd__(self, other):print("特殊方法__radd__被调用")return "yyy"# return NotImplementedobj1 = C1()
obj2 = C2()print(obj1 + obj2)
特殊方法__add__被调用
特殊方法__radd__被调用
yyy
python学习高级篇(part8)--类对象的特殊方法相关推荐
- python学习高级篇(part10)--类对象的特殊方法和特殊属性
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...
- python学习高级篇(part7)--特殊属性和特殊方法
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 特殊属性和特殊方法 获取对象的信息之特殊属性`__dict__` 获取对象的信息之反射 类对象的特殊方法`__len__()` pyt ...
- python学习高级篇(part1)--类属性
学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类属性 举个例子 举个例子 类属性 类属性指的是类对象所绑定的属性. 绑定类属性(给类对象绑定属性)的方式有两种: 在类对象的内部( ...
- python学习高级篇(part9)--对象的引用计数
学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...
- python学习高级篇(part3)--MRO
学习笔记,仅供参考,有错必究 MRO MRO的全称是Method Resolution Order(方法解析顺序),它指的是对于一颗类继承树,当调用最底层类对象所对应实例对象的方法时,Python解释 ...
- python学习高级篇(part2)--类方法,静态方法,访问控制
学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类方法 举个例子 静态方法 举个例子 访问控制 举个例子 举个例子 举个例子 类方法 类方法指的是类对象中使用装饰器@classme ...
- python学习高级篇(part6)--内置函数dir
学习笔记,仅供参考,有错必纠 内置函数dir 对于类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表. 类对象与实例对象的结果是有区别的, ...
- python学习高级篇(part5)--内置函数type
学习笔记,仅供参考,有错必纠 内置函数type 内置函数type()用于获得指定对象的类型,比如:实例对象的类型是其对应的类对象. 举个例子 代码: class MyClass(object):pas ...
- python学习高级篇(part4)--内置函数issubclass和isinstance
学习笔记,仅供参考,有错必纠 文章目录 issubclass()函数 举个例子 isinstance()函数 举个例子 issubclass()函数 内置函数issubclass()用于判断类对象与类 ...
最新文章
- 【tf.keras】TensorFlow 1.x 到 2.0 的 API 变化
- P3321 [SDOI2015]序列统计
- oracle 连接查询--内连接与外连接
- 《CCNP TSHOOT 300-135认证考试指南》——5.10节定义关键术语
- 四十四、ETL工具的查询_连接和映射
- 你能体会那种写 Python 时不用 import 的幸福吗?
- oracle中or会使索引,为何查询条件中多了 OR 选项,索引就走全扫描?
- Java Number shortValue()方法与示例
- java获取异常信息_Python中获取异常(Exception)信息
- OSGI嵌入tomcat应用服务器(gem-web)——资源下载
- 随机森林原始论文_推荐一个神器画出论文中酷炫的机器学习图
- 别人重构了整套代码,汝还不知道哪里有问题,相差几个等级?
- Atitit 大数据体系树 艾提拉著 数据采集 gui自动化 爬虫 Nui自动化 Ocr技术 Tts语音处理 文档处理(office zip等) html文档处理解析 转换与处理
- android开发中常用的Eclipse快捷键详细整理
- 【C】C语言int型数组转化为char型字符串数组
- 习题9-2(免费糖果)【深搜dfs】+【记忆化搜索】
- win7系统下共享电脑网络
- Python自动化第二周之数据模块
- CSS3 实现 loading 动画效果
- ubuntu如何卸载mysql(ubuntu卸载mysql的具体方法)
热门文章
- 0009:err:listview:LISTVIEW_WindowProc unknown msg 108c问题解决
- 开源软件 cadsurf 阅读笔记
- 数据分析:度量数据散布的四分位数
- 阿里云技术白皮书_对阿里重磅发布的云原生架构白皮书的初步解读
- 给其他账户访问mysql的权限,将postgresql数据库的权限授予其他用户
- 解决cc1plus.exe: out of memory allocating bytes
- vmware-tools安装
- [24]CSS3 弹性伸缩布局(上)
- Linux内核实现多路镜像流量聚合和复制
- 域名商2014年度报告:中国数据域名总量跌至22万