您的位置:首页 > 编程语言 > Python开发

Python的特殊方法

2017-08-31 21:44 197 查看
  最近在阅读流畅的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其他的常用特殊方法





   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: