在Python中有些方法名、属性名的先后都添加了双下划线,这种方法、属性一般都属于Python的特殊方法和特殊属性,开发者能够经过重写这些方法或者直接调用这些方法来实现特殊的功能。其实前面见过的构造方法__init__() 就是一种特殊方法,开发者能够经过重写类中的__init__方法实现本身想要的初始化逻辑。spa
Python类中的特殊方法、特殊属性有些须要开发者从新写,有些则能够直接调用。code
栗子:对象
1 #coding=utf-8 2 class Item(): 3 def __init__(self,name,price): 4 self.name=name 5 self.price=price 6 #建立一个Item对象,将之赋值给it变量 7 it = Item('鼠标',29.8) 8 #打印it所引用的Item对象 9 print(it)
打印以下:blog
解释:上面程序建立了Item对象,而后使用print() 方法输出Item 对象。内存
运行程序以后可能出现不一样的输出结果:at后面的16位十六进制数字可能发生改变。it原本是Item的一个实例对象,可是为何输出的是这样的字符串?这就是由于有__repr__()方法,控制台打印的实际上是__repr__()方法的返回值。因此说打印it 或者是打印 im.__repr__()效果是同样的。utf-8
1. __repr__()方法是object类提供的方法,而全部的Python类都是object类的子类,所以全部的Python对象都具备__repr__() 方法。因此若是须要将任何对象与字符串进行链接时,均可先调用__repr__()方法将对象转为字符串,再将字符串链接在一块儿。开发
2. __repr__()之因此特殊,是由于它是一个“自我描述”的方法,该方法一般实现场景是:当开发人员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具备的状态信息。字符串
3. object类提供的__repr__()方法老是返回该对象实现类的“类名+object at + 内存地址 ”值,这个返回值并不能真正实现“自我描述”的功能,所以若是用户须要自定义类能实现“自我描述”的功能,就必须重写__repr__()方法。it
大部分时候,重写__repr__() 方法老是返回该对象使人感兴趣的信息所组成的字符串。一般可返回以下格式的字符串:class
类名[field1=值1,field2=值2,...]