Python详解类的 __repr__() 方法

Posted Xavier Jiezou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python详解类的 __repr__() 方法相关的知识,希望对你有一定的参考价值。


引言

类的 __repr__() 方法定义了实例化对象的输出信息,重写该方法,可以输出我们想要的信息,对类的实例化对象有更好的了解。

描述

object.__repr__(self)

Called by the repr() built-in function to compute the “official” string representation of an object. If at all possible, this should look like a valid Python expression that could be used to recreate an object with the same value (given an appropriate environment). If this is not possible, a string of the form <…some useful description…> should be returned. The return value must be a string object. If a class defines __repr__() but not __str__(), then __repr__() is also used when an “informal” string representation of instances of that class is required.

repr() 内置函数调用以输出一个对象的“官方”字符串表示。如果可能,这应类似一个有效的 Python 表达式,能被用来重建具有相同取值的对象(只要有适当的环境)。如果这不可能,则应返回形式如 <...一些有用的描述信息...> 的字符串。返回值必须是一个字符串对象。如果一个类定义了 __repr__() 但未定义 __str__(),则在需要该类的实例的“非正式”字符串表示时也会使用 __repr__()

一句话概括就是: 类可以通过定义 __repr__() 方法来控制此函数为它的实例所返回的内容。

用法

运行:

class Std:
    def __init__(self, name, age):
        self.name = name
        self.age = age
print(Std('john', 18))

输出:

<__main__.Std object at 0x000001ADB0530C10>

从上述代码的运行结果可以看到,打印类的实例化对象,默认输出是 <类名+ object at +内存地址>,该输出太抽象了,对我们了解类的实例化对象没有什么帮助。

如何自定义类的实例化对象的输出呢?这里就需要重写 __repr__() 方法了。

重写方式如下,添加 __repr__() 方法,返回一个自定义的字符串即可,字符串里面可以包含任何你想包含的、关于该实例化对象的信息。


运行:

class Std:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'Std(name={self.name}, age={self.age})'
print(Std('john', 18))

输出:

Std(name=john, age=18)

参考

https://docs.python.org/3/reference/datamodel.html#object.repr

以上是关于Python详解类的 __repr__() 方法的主要内容,如果未能解决你的问题,请参考以下文章

Python类的内置方法

python学习之__str__,__repr__

Python进阶-----通过类的内置方法__str__和__repr__自定制输出(打印)对象时的字符串信息

python 的特殊方法 __str__和__repr__

python 的特殊方法 __str__和__repr__

Python3基础 __repr__ 类的实例对象的名字 可以打印文字