类的 __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