详解Python 类的__repr__方法转换字符串

  • Post category:Python

Python 中类的 __repr__ 方法用于将对象转换为可打印的字符串形式,以便于调试和查看对象信息。在 Python 标准库中,很多类都实现了这个方法,比如列表、字典等容器类,当我们用 print 函数打印这些对象时,实际上是调用了它们的 __repr__ 方法来输出字符串形式的信息。

下面是 __repr__ 方法的使用方法:

class MyClass:
    def __init__(self, value):
        self.value = value

    def __repr__(self):
        return f'MyClass({self.value})'

在上面的示例中,我们定义了一个带有属性 value 的类 MyClass,并重写了 __repr__ 方法。该方法返回一个字符串,该字符串包含类名以及其属性值。

我们可以使用以下代码来创建 MyClass 的实例,并调用其 __repr__ 方法:

obj = MyClass(10)
print(repr(obj))  # MyClass(10)

接下来,让我们看一个更复杂的例子。考虑一下一个表示二维向量的类:

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f'Vector2D({self.x}, {self.y})'

    def __add__(self, other):
        return Vector2D(self.x + other.x, self.y + other.y)

在上面的示例中,我们定义了一个带有坐标 x 和 y 的二维向量类 Vector2D,并重写了 __repr__ 方法。此外,我们还实现了 __add__ 方法,用于向量加法。

现在让我们测试一下 Vector2D 类:

vec1 = Vector2D(1, 2)
vec2 = Vector2D(3, 4)

# 打印__repr__方法返回的字符串
print(vec1)     # Vector2D(1, 2)
print(vec2)     # Vector2D(3, 4)

# 使用加法运算符
vec3 = vec1 + vec2
print(vec3)     # Vector2D(4, 6)

在上面的示例中,我们创建了两个 Vector2D 类的实例 vec1 和 vec2,然后使用加法运算符将它们加在一起,得到了一个新的 Vector2D 实例 vec3。

最后,我们输出这些向量对象的字符串表示形式,可以看到这些对象在调用 __repr__ 方法时返回的字符串非常具有描述性。