福建住房和城乡建设厅网站一体化平台网站 怎么做百度才能搜索出来
1. __repr__
 
__repr__ 方法由 repr() 内置函数调用,用于计算对象的“正式”字符串表示形式。理想情况下,这个字符串应该看起来像一个有效的 Python 表达式,可以在适当的环境下用来重新创建具有相同值的对象。如果这不可能实现,那么 __repr__ 应该返回一个描述对象状态的字符串。返回值必须是一个字符串对象。
这个方法通常用于调试,因此重要的是,表示形式必须信息丰富且明确。例如,如果定义了一个类并且只定义了 __repr__ 而没有定义 __str__,那么当需要该类的实例的“非正式”字符串表示形式时,__repr__ 也会被使用。
class Student:def __init__(self, name, age):self._name = nameself._age = agedef __repr__(self):return f"{self.__class__.__name__}({self._name!r}, {self._age!r})"
 
这里使用了 !r 格式化字符串,它会调用 repr() 函数来获取变量的字符串表示形式,这通常用于确保输出的字符串是可读的。
2. __str__
 
__str__ 方法由 str()、format() 和 print() 内置函数调用,用于计算对象的“非正式”或易于打印的字符串表示形式。与 __repr__ 不同,__str__ 不需要返回有效的 Python 表达式:可以使用更直观或更简洁的表示形式。
    def __str__(self):return f"a student named {self._name}"
 
这种方法的目的是为用户提供一个易于阅读的字符串,通常在打印对象时使用。
3. 使用 !s 和 !r
 
在 Python 中,格式化字符串时可以使用 !s 和 !r 来转换值。!s 调用 str() 函数,而 !r 调用 repr() 函数。这在需要在格式化之前转换值时非常有用。
print(f"Student name: {student!r}")  # 使用 repr()
print(f"Student name: {student!s}")  # 使用 str()
 
这允许开发者在打印或显示对象时,根据需要选择更正式或更非正式的表示形式。
希望这能帮助你更好地理解 __repr__ 和 __str__ 方法的用途和实现方式。
