【Python】【魔术方法】(二)对象的字符串表示
在Python中,__str__, __repr__, 和 __format__ 是三个非常常用的特殊方法(也称为魔术方法或dunder方法),用于对对象进行字符串化表示。这些方法在对象需要以字符串形式展示时特别有用,例如在打印对象或进行格式化输出时。下面分别详细介绍这三个方法:
1. __str__ 方法
__str__ 方法返回一个“用户友好”的字符串表示形式。这个方法通常用于 print() 函数或 str() 函数调用时。目的是让人容易理解,适合作为直接输出的内容。
-
格式:
def __str__(self): return "字符串表示" -
示例:
class Person: def __init__(self, name, age): self.name = name self.age = age def __str__(self): return f"Person: {self.name}, {self.age} years old" p = Person("Alice", 30) print(p) # 输出: Person: Alice, 30 years old
2. __repr__ 方法
__repr__ 方法返回一个“开发友好”的字符串表示形式。这个方法通常用于调试和开发,目的是让开发人员能够清楚地看到对象的内部状态。返回的字符串应该尽可能详细,最好能够包含足够的信息来重新创建对象。
-
格式:
def __repr__(self): return "详细字符串表示" -
示例:
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return f"Person(name={self.name!r}, age={self.age!r})" p = Person("Alice", 30) print(repr(p)) # 输出: Person(name='Alice', age=30)
3. __format__ 方法
__format__ 方法用于自定义对象的格式化输出。这个方法通常在使用 format() 函数或 f-string 进行格式化时调用。__format__ 方法接收一个格式字符串,并返回根据该格式字符串格式化的字符串。
-
格式:
def __format__(self, format_spec): return "格式化后的字符串" -
示例:
class Person: def __init__(self, name, age): self.name = name self.age = age def __format__(self, format_spec): if format_spec == "name": return self.name elif format_spec == "age": return str(self.age) else: return f"Person: {self.name}, {self.age} years old" p = Person("Alice", 30) print(format(p, "name")) # 输出: Alice print(format(p, "age")) # 输出: 30 print(format(p, "")) # 输出: Person: Alice, 30 years old
总结
__str__:用于返回对象的用户友好字符串表示。__repr__:用于返回对象的开发友好字符串表示。__format__:用于自定义对象的格式化输出。
通常情况下,如果定义了 __repr__ 而没有定义 __str__,Python 会使用 __repr__ 作为 __str__ 的后备方法。因此,定义 __repr__ 是一个好习惯,因为它可以确保在需要时总有一个合理的字符串表示。

浙公网安备 33010602011771号