先看下面程序:
class Item:
def __init__ (self, name, price):
self.name = name
self.price = price
# 创建一个Item对象,将之赋给im变量
im = Item('鼠标', 29.8)
# 打印im所引用的Item对象
print(im)
上面的程序创建了一个Item对象,然后使用print()方法输出了Item对象。编译并运行上面的程序,你会看到如下输出:
<__main__.Item object at 0x000001DB45D406D8>
读者运行上述程序时,可能会看到不同的输出结果,at后面的16位十六进制数可能会发生变化。但是这个输出是从哪里来的呢?按道理来说,print()函数只能在控制台打印字符串,Item实例是内存中的一个对象。怎么直接转成字符串输出呢?
事实上,当使用该方法输出 Item 对象时,实际上输出的是 Item 对象的 __repr__() 方法的返回值。也就是说,下面两行代码的效果完全一样:
print (im)
print (im.__repr__)
__repr__() 是 Python 类中的一个特殊方法。由于对象类已经提供了这个方法,而所有的Python类都是对象类的子类,所以所有的Python对象都有一个__repr__()方法。
因此,当程序需要将任意对象与字符串拼接时,可以先调用__repr__()方法将对象转换为字符串,然后再将两个字符串拼接在一起。例如下面的代码:
im str = im.__repr() + ""
__repr__() 是一个非常特殊的方法,它是一个“自我描述”的方法,该方法通常用于实现这样一个功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具有的状态信息。
object 类提供的 __repr__() 方法总是返回该对象实现类的“类名+object at+内存地址”值,这个返回值并不能真正实现“自我描述”的功能,因此,如果用户需要自定义类能实现“自我描述”的功能,就必须重写 __repr__() 方法。例如下面程序:
class Apple:
# 实现构造器
def __init__(self, color, weight):
self.color = color;
self.weight = weight;
# 重写__repr__方法,用于实现Apple对象的“自我描述”
def __repr__(self):
return "Apple[color=" + self.color +\
", weight=" + str(self.weight) + "]"
a = Apple("红色" , 5.68)
# 打印Apple对象
print(a)
编译、运行上面程序,可以看到如下运行结果:
Apple[color=红色, weight=5.68]
从上面的运行结果可以看出,通过重写 Apple 类的 __repr__() 方法,就可以让系统在打印 Apple 对象时打印出该对象的“自我描述”信息。
大多数时候,重写 __repr__() 方法总是会返回一个字符串,其中包含有关该对象的所有有趣信息。通常返回以下格式的字符串:
类名[field1 = 值1, field2 =值2, ...]
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python中获取密码输入的数量11/06
- ♥ python的默认参数是什么09/15
- ♥ 如何在python中绘制对数函数图?09/30
- ♥ jsonrpc在python中的实现12/21
- ♥ python中的索引是什么?如何在列表中建立索引?08/19
- ♥ 如何在 Python 中编写复数10/05
内容反馈