博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用特殊方法
阅读量:6329 次
发布时间:2019-06-22

本文共 795 字,大约阅读时间需要 2 分钟。

特殊方法的存在是为了被 Python 解释器调用的,你自己 并不需要调用它们。也就是说没有 my_object.__len__() 这种写法, 而应该使用 len(my_object)。在执行 len(my_object) 的时候,如果 my_object 是一个自定义类的对象,那么 Python 会自己去调用其中由 你实现的 __len__ 方法。

然而如果是 Python 内置的类型,比如列表(list)、字符串(str)、 字节序列(bytearray)等,那么 CPython 会抄个近路,__len__ 实际 上会直接返回 PyVarObject 里的 ob_size 属性。PyVarObject 是表示 内存中长度可变的内置对象的 C 语言结构体。直接读取这个值比调用一 个方法要快很多。

很多时候,特殊方法的调用是隐式的,比如 for i in x: 这个语句, 背后其实用的是 iter(x),而这个函数的背后则是 x.__iter__() 方 法。当然前提是这个方法在 x 中被实现了。

通常你的代码无需直接使用特殊方法。除非有大量的元编程存在,直接 调用特殊方法的频率应该远远低于你去实现它们的次数。唯一的例外可 能是 __init__ 方法,你的代码里可能经常会用到它,目的是在你自己 的子类的 __init__ 方法中调用超类的构造器。

通过内置的函数(例如 len、iter、str,等等)来使用特殊方法是最 好的选择。这些内置函数不仅会调用特殊方法,通常还提供额外的好 处,而且对于内置的类来说,它们的速度更快。

不要自己想当然地随意添加特殊方法,比如 __foo__ 之类的,因为虽 然现在这个名字没有被 Python 内部使用,以后就不一定了。

转载于:https://www.cnblogs.com/lshedward/p/10117031.html

你可能感兴趣的文章
wampServer连接oracle
查看>>
CentOS 6.5下编译安装新版LNMP
查看>>
Android Picasso
查看>>
top命令
查看>>
我的友情链接
查看>>
javascript的作用域
查看>>
新形势下初创B2B行业网站如何经营
查看>>
初心大陆-----python宝典 第五章之列表
查看>>
java基础学习2
查看>>
sysbench使用笔记
查看>>
有关电子商务信息的介绍
查看>>
NFC·(近距离无线通讯技术)
查看>>
nginx 禁止某个IP访问立网站的设置方法
查看>>
多线程基础(三)NSThread基础
查看>>
PHP的学习--Traits新特性
查看>>
ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法
查看>>
Ext.form.field.Number numberfield
查看>>
异地多活数据中心项目
查看>>
Linux文件夹分析
查看>>
解决部分月份绩效无法显示的问题:timestamp\union al\autocommit等的用法
查看>>