美文网首页
python魔术方法(特殊方法)如何使用

python魔术方法(特殊方法)如何使用

作者: 一杯海风_3163 | 来源:发表于2019-10-23 17:34 被阅读0次

首先明确一点,特殊方法的存在是为了被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,等等)来使用特殊方法是最好的U型安泽。这些内置的函数不仅会调用特殊方法,通常还提供额外的好处,而且对于内置的类来说,它们的速度更快。
不要自己想当然的随意添加特殊方法,比如foo之类的,因为虽然现在这个名字没有被python内部使用,以后就不一定了。

相关文章

网友评论

      本文标题:python魔术方法(特殊方法)如何使用

      本文链接:https://www.haomeiwen.com/subject/amikvctx.html