关于python之特殊方法的使用的解释

如何使用python的特殊方法

首先明确一点,python的特殊方法的存在是为了被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内部使用,以后就不一定了!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后端工匠之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值