学习笔记,仅供参考,有错必纠


文章目录

  • 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)--类对象的特殊方法相关推荐

  1. python学习高级篇(part10)--类对象的特殊方法和特殊属性

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__del__()` 类对象的特殊方法之`__getattr__()` 类对象的特殊方法之`__getitem__ ...

  2. python学习高级篇(part7)--特殊属性和特殊方法

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 特殊属性和特殊方法 获取对象的信息之特殊属性`__dict__` 获取对象的信息之反射 类对象的特殊方法`__len__()` pyt ...

  3. python学习高级篇(part1)--类属性

    学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类属性 举个例子 举个例子 类属性 类属性指的是类对象所绑定的属性. 绑定类属性(给类对象绑定属性)的方式有两种: 在类对象的内部( ...

  4. python学习高级篇(part9)--对象的引用计数

    学习笔记,仅供参考,有错必纠 文章目录 python 学习高级篇 类对象的特殊方法之`__str__()` 类对象的特殊方法之`__new__()` 对象的引用计数 什么是引用计数 对象的引用计数加1 ...

  5. python学习高级篇(part3)--MRO

    学习笔记,仅供参考,有错必究 MRO MRO的全称是Method Resolution Order(方法解析顺序),它指的是对于一颗类继承树,当调用最底层类对象所对应实例对象的方法时,Python解释 ...

  6. python学习高级篇(part2)--类方法,静态方法,访问控制

    学习笔记,仅供参考,有错必纠 学习资源:图解python 文章目录 类方法 举个例子 静态方法 举个例子 访问控制 举个例子 举个例子 举个例子 类方法 类方法指的是类对象中使用装饰器@classme ...

  7. python学习高级篇(part6)--内置函数dir

    学习笔记,仅供参考,有错必纠 内置函数dir 对于类对象或实例对象,可以调用内置函数dir()获得其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表. 类对象与实例对象的结果是有区别的, ...

  8. python学习高级篇(part5)--内置函数type

    学习笔记,仅供参考,有错必纠 内置函数type 内置函数type()用于获得指定对象的类型,比如:实例对象的类型是其对应的类对象. 举个例子 代码: class MyClass(object):pas ...

  9. python学习高级篇(part4)--内置函数issubclass和isinstance

    学习笔记,仅供参考,有错必纠 文章目录 issubclass()函数 举个例子 isinstance()函数 举个例子 issubclass()函数 内置函数issubclass()用于判断类对象与类 ...

最新文章

  1. 【tf.keras】TensorFlow 1.x 到 2.0 的 API 变化
  2. P3321 [SDOI2015]序列统计
  3. oracle 连接查询--内连接与外连接
  4. 《CCNP TSHOOT 300-135认证考试指南》——5.10节定义关键术语
  5. 四十四、ETL工具的查询_连接和映射
  6. 你能体会那种写 Python 时不用 import 的幸福吗?
  7. oracle中or会使索引,为何查询条件中多了 OR 选项,索引就走全扫描?
  8. Java Number shortValue()方法与示例
  9. java获取异常信息_Python中获取异常(Exception)信息
  10. OSGI嵌入tomcat应用服务器(gem-web)——资源下载
  11. 随机森林原始论文_推荐一个神器画出论文中酷炫的机器学习图
  12. 别人重构了整套代码,汝还不知道哪里有问题,相差几个等级?
  13. Atitit 大数据体系树 艾提拉著 数据采集 gui自动化 爬虫 Nui自动化  Ocr技术 Tts语音处理 文档处理(office zip等) html文档处理解析 转换与处理
  14. android开发中常用的Eclipse快捷键详细整理
  15. 【C】C语言int型数组转化为char型字符串数组
  16. 习题9-2(免费糖果)【深搜dfs】+【记忆化搜索】
  17. win7系统下共享电脑网络
  18. Python自动化第二周之数据模块
  19. CSS3 实现 loading 动画效果
  20. ubuntu如何卸载mysql(ubuntu卸载mysql的具体方法)

热门文章

  1. 0009:err:listview:LISTVIEW_WindowProc unknown msg 108c问题解决
  2. 开源软件 cadsurf 阅读笔记
  3. 数据分析:度量数据散布的四分位数
  4. 阿里云技术白皮书_对阿里重磅发布的云原生架构白皮书的初步解读
  5. 给其他账户访问mysql的权限,将postgresql数据库的权限授予其他用户
  6. 解决cc1plus.exe: out of memory allocating bytes
  7. vmware-tools安装
  8. [24]CSS3 弹性伸缩布局(上)
  9. Linux内核实现多路镜像流量聚合和复制
  10. 域名商2014年度报告:中国数据域名总量跌至22万