Python 的数据模型通过一系列特殊的方法(有时候被称为魔术方法)使你能够在自己的类中定义对象的行为。这些特殊方法有固定的命名规则,都是以双下划线(__
)开头和结尾的。下面我会介绍一个和这些特殊方法相关的 Python 小技巧:美化你的类的打印输出。
自定义对象字符串表示
当你打印一个对象时,默认情况下它会显示一个不那么友好的内存地址。但你可以通过增加 __str__
和 __repr__
特殊方法使输出更加友好。
__str__
方法
__str__
应返回一个对象的可读性高的字符串表示,它经常用于将对象的信息以友好的方式展示给用户。
__repr__
方法
__repr__
应返回一个对象的官方字符串表示,它最好是可以用来重构这个对象的输出。这通常是给开发者看的。
class Product:
def __init__(self, name, price):
self.name = name
self.price = price
def __str__(self):
return f'Product(name={self.name}, price={self.price})'
def __repr__(self):
return f'Product({self.name!r}, {self.price!r})'
在这个例子中,当你打印一个 Product
对象时:
p = Product('Widget', 50)
# 对用户友好的输出
print(str(p)) # Output: Product(name=Widget, price=50)
# 对开发者友好的输出,可以重新创建对象
print(repr(p)) # Output: Product('Widget', 50)
这样的技巧对于调试和记录非常有帮助,因为它能够根据对象类型和状态提供清晰而准确的信息。
使用 __str__
和 __repr__
来定义对象的字符串表示可以显著提升代码的可维护性,并且让日志和调试输出更容易理解。通常,在编写一个新的类时,定义好 __repr__
方法是一个好习惯。如果这个类用于跟最终用户交互,那么也应该定义一个 __str__
方法。