Python学习笔记 1-字符串表示__repr__和__str__

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Irlyue/article/details/88909080

文章目录

字符串表示

Python的数据模型提供了两个特殊函数来让用户个性化一个类实例的字符串表示,分别是__repr____str__。举《Fluent Python》书中的例子,实现一个简单的二维向量:

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y
    
    def __repr__(self):
        return 'Vector(%r, %r)' % (self.x, self.y)
    
    def __str__(self):
        return 'Just a 2-d vector (%r, %r)' % (self.x, self.y)
>>> v = Vector(1, 2)
>>> print(repr(v))
Vector(1, 2)
>>> print(str(v))
Just a 2-d vector (1, 2)
>>> print(v)
Just a 2-d vector (1, 2)

可以看到,__repr____str__都可以给出一个类实例的字符串表示,但他们的用法有些区别:

  • __repr__给出的字符串表示一般就跟你创建这个实例的源代码一样,即Vector(1, 2);所以它一般面向programmer,通常用于打日志以及调试的时候使用。(但奇怪,自己在Pycharm里进行调试的时候使用的字符串表示是__str__,如下图)
    在这里插入图片描述
  • __str__给出的字符串表示一般更加接近人类的自然语言描述,有语义信息;所以它一般面向普通用户,像print函数用的就是__str__

如果你只想实现其中一个函数,书中建议实现__repr__,因为当__str__没有实现的时候,Python解释器会调用__repr__作为备选方案。

用途

字符串表示有非常多的用途,举目前很流行的深度学习框架pytorch,当需要定义自己的模型时,我们一般重载nn.Module类,然后指定网络结构。Pytorch框架自己重载了__repr__的实现,于是我们可以在终端打印自己定义的模型:

from torchvision import models

vgg = models.vgg11()
print(vgg)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Irlyue/article/details/88909080
今日推荐