温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么使用Python中的__str__()和__repr__()

发布时间:2021-11-22 11:39:44 来源:亿速云 阅读:165 作者:iii 栏目:大数据
# 怎么使用Python中的__str__()和__repr__()

在Python中,`__str__()`和`__repr__()`是两个重要的魔术方法(magic methods),用于定义对象的字符串表示形式。虽然它们的功能相似,但使用场景和目的有所不同。本文将详细介绍它们的区别、用法以及如何在实际开发中正确实现这两个方法。

## 1. `__str__()`方法

`__str__()`方法用于返回对象的“非正式”或可读性好的字符串表示,通常面向终端用户。当你使用`print()`函数或`str()`函数时,Python会调用该方法。

### 示例代码
```python
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __str__(self):
        return f"Person(name={self.name}, age={self.age})"

p = Person("Alice", 30)
print(p)  # 输出:Person(name=Alice, age=30)

特点

  • 目标是可读性。
  • 通常用于日志、用户界面等场景。
  • 如果没有定义__str__(),Python会调用__repr__()作为备用。

2. __repr__()方法

__repr__()方法返回对象的“正式”字符串表示,通常是合法的Python表达式,能够用于重新创建该对象。它主要面向开发者,常用于调试。

示例代码

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def __repr__(self):
        return f"Person(name='{self.name}', age={self.age})"

p = Person("Alice", 30)
print(repr(p))  # 输出:Person(name='Alice', age=30)

特点

  • 目标是明确性和无歧义。
  • 理想情况下,eval(repr(obj))应能重新创建对象。
  • 在交互式环境中直接输入对象名时,会调用__repr__()

3. 两者的区别

特性 __str__() __repr__()
目标用户 终端用户 开发者
用途 可读性输出 调试、重新创建对象
调用场景 print()str() repr()、交互式环境
默认行为 若未定义,调用__repr__() 若未定义,返回内存地址信息

4. 最佳实践

  1. 始终实现__repr__()
    因为它能提供对象的明确信息,对调试至关重要。

  2. 按需实现__str__()
    如果需要一个用户友好的输出,再额外实现该方法。

  3. 保持一致性
    __repr__()的输出应尽量满足eval(repr(obj)) == obj

完整示例

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    
    def __repr__(self):
        return f"Point({self.x}, {self.y})"
    
    def __str__(self):
        return f"({self.x}, {self.y})"

p = Point(1, 2)
print(str(p))    # 输出:(1, 2)
print(repr(p))   # 输出:Point(1, 2)

5. 总结

  • __str__()用于用户友好的输出,__repr__()用于开发者调试。
  • 优先实现__repr__(),再根据需要实现__str__()
  • 通过合理使用这两个方法,可以显著提升代码的可读性和可维护性。

掌握这两个魔术方法的使用,能够让你的Python类更加专业和易用! “`

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI