Python的特殊方法

  最近在阅读流畅的Python,看到了Python中的特殊方法,写一下自己的总结。

  特殊方法的存在是给Python解释器调用的,你自己并不需要调用他们,也就是说没有my_objects.__len__()这种写法,而应该使用len(my_objects)。在执行len(my_objects)的时候,如果my_objects是一个自定义的类的对象。那么你应该重写__len__()方法,之后调用len(my_objects)的时候,Python解释器会调用你重写的__len__方法。

  1常见的特殊方法

  一些常见的内置类型对象比如list,str,bytearray,当需要执行__len__方法时,CPython会抄一个近路,__len__方法实际上会直接返回PyVarObject里的ob_size这个属性。Python使用C重写过,以上的三种内置对象其实是一个结构体,获取list的长度解释器只需要获取结构体中的size属性即可,所以速度会非常的快。

  Python中有一种内置的函数repr,他能把一个对象用字符串来表示,类似于Java的object基类中的toString()方法,在Python中就是__repr__()方法,当我们自定义一个类时,重写__repr__()方法,我们调用这个方法就可以这样:

class test:

    def __repr__(self):
        return "this is test object"


o = test()
print(repr(o))
 程序的运行结果就是打印出一个字符串,如果一个自定义类没有重写__repr__()方法,当执行repr()方法时会打印出这个对象的引用字符串,比如如下程序
class test:

    def test(self):
        print(" ")


o = test()
print(repr(o))
  最终打印出来是<__main__.test object at 0x1019788d0> 

  __repr__和__str__的区别在于,后者是在str()函数被调用,或是在使用print函数打印一个对象的时候才被调用,并且他返回的字符串对用户更加友好,如果你只想实现这两个特殊方法中的一个,__repr__是更加友好的选择。因为如果一个对象没有__str__函数,而Python又需要调用他的时候,解释器会用__repr__作为替代,如下面一个程序:

class test:

    def __repr__(self):
        return "this is test object"


o = test()
print(o)
  程序运行结果与第一次运行结果相同。

  当我们使用映射对象时,比如dict,一个键值对映射类型,有时我们要获得一个key所对应的value,我们使用getitem(key)方法,如果key不存在,解释器就会调用__missing__()方法。

1.2其他的常用特殊方法



   

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值