zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Python面向对象编程-魔术方法-__str__和__repr__方法

Python方法 __ 面向对象编程 魔术 Str -__
2023-06-13 09:18:43 时间

在Python面向对象编程中,魔术方法是一组特殊的方法,用于在特定情况下调用对象的操作。其中,__str__和__repr__方法是最常用的魔术方法之一。这两个方法都是用于打印对象时的字符串表示形式,但它们的作用略有不同。

__str__方法用于在print语句中打印对象时的字符串表示形式。该方法返回一个字符串,该字符串是对象的可读性更好的表示形式,通常用于向终端输出信息。

__repr__方法返回一个字符串,该字符串是用于在Python解释器中重新创建该对象的字符串表示形式。通常情况下,该字符串应该是一个Python表达式,可以直接传递给Python解释器。

下面是一个简单的例子,演示了如何使用__str__和__repr__方法:

class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"{self.name} is {self.age} years old."
    
    def __repr__(self):
        return f"MyClass('{self.name}', {self.age})"
    
obj = MyClass("Alice", 25)

# 使用__str__方法打印对象的可读性更好的表示形式
print(obj)  # 输出: Alice is 25 years old.

# 使用__repr__方法打印对象的字符串表示形式
print(repr(obj))  # 输出: MyClass('Alice', 25)

在上面的例子中,我们定义了一个MyClass类,并在其构造函数中初始化了两个属性:name和age。接着,我们实现了__str__和__repr__方法。在__str__方法中,我们返回了一个字符串,描述了该对象的可读性更好的表示形式。而在__repr__方法中,我们返回了一个字符串,用于在Python解释器中重新创建该对象。最后,我们创建了一个MyClass对象obj,并使用print语句和repr函数分别打印了它的可读性更好的表示形式和字符串表示形式。

需要注意的是,__repr__方法返回的字符串必须是一个有效的Python表达式,可以直接传递给Python解释器。如果返回的字符串不是一个有效的Python表达式,那么在使用eval函数或者直接复制该字符串时会引发语法错误。