python类中的__repr__方法:显示属性

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__() 是一个非常特殊的方法,它是一个“自我描述”的方法,该方法通常用于实现这样一个功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具有的状态信息。
object 类提供的 __repr__() 方法总是返回该对象实现类的“类名+object at+内存地址”值,这个返回值并不能真正实现“自我描述”的功能,因此,如果用户需要自定义类能实现“自我描述”的功能,就必须重写 __repr__() 方法。例如下面程序:

class Node:
    '''
    data: 节点保存的数据
    _next: 保存下一个节点对象
    '''
    def __init__(self, data, pnext=None):
        self.data = data
        self._next = pnext

    def __repr__(self):
        '''
        用来定义Node的字符输出,
        print为输出data
        '''
        return str(self.data)
def main():
    node = Node(1, 2)
    print(node)
    print(node.__repr__())

if __name__ == '__main__':
    main()

编译、运行上面程序,可以看到如下运行结果:

1
1

大部分时候,重写 __repr__() 方法总是返回该对象的所有令人感兴趣的信息所组成的字符串。通常可返回如下格式的字符串:

类名[field1 = 值1, field2 =值2, ...]
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容