Python __str__()方法
在Python中,str() 方法是一个特殊的方法(也称为魔术方法或双下方法),它定义了当对象需要被转换为字符串表示时应该如何做。
当你尝试打印对象(使用 print() 函数)或将对象插入到需要字符串表示的上下文中(比如字符串格式化或拼接)时,Python会自动调用该对象的 str() 方法。
基本用法
str() 方法应该返回一个字符串,这个字符串是对对象状态的合理描述。它没有参数(除了 self),并且必须被定义为一个实例方法。
class MyClass:
def __init__(self, name, value):
self.name = name
self.value = value
def __str__(self):
return f"MyClass(name={self.name}, value={self.value})"
# 实例化 MyClass 并打印
obj = MyClass("example", 42)
print(obj) # 输出: MyClass(name=example, value=42)
与 repr() 的区别
str() 和 repr() 都是用于生成对象的字符串表示的特殊方法,但它们有不同的用途和期望的输出:
str():应该返回一个对用户友好的、可读性强的字符串表示,主要用于打印和日志记录等场景。
repr():应该返回一个对开发者友好的、尽可能准确的字符串表示,通常包括对象的类型和足够的信息来重新创建该对象(如果可能的话)。它通常被用于调试,并且 repr() 函数会调用它。
如果 str() 没有被定义,那么在需要字符串表示时,Python会回退到调用 repr()。但是,最好同时定义这两个方法,以确保对象在不同上下文中都能有合适的表现。
示例
下面是一个同时定义了 str() 和 repr() 方法的示例:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"Point({self.x}, {self.y})"
def __repr__(self):
return f"Point(x={self.x}, y={self.y})"
# 实例化 Point 并测试输出
p = Point(3, 4)
print(p) # 输出: Point(3, 4)
print(repr(p)) # 输出: Point(x=3, y=4)
在这个例子中,str() 提供了一个简洁的用户友好表示,而 repr() 提供了一个更详细且可能包含更多信息的开发者友好表示。