# 怎么使用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__()作為備用。__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__()。| 特性 | __str__() |
__repr__() |
|---|---|---|
| 目標用戶 | 終端用戶 | 開發者 |
| 用途 | 可讀性輸出 | 調試、重新創建對象 |
| 調用場景 | print()、str() |
repr()、交互式環境 |
| 默認行為 | 若未定義,調用__repr__() |
若未定義,返回內存地址信息 |
始終實現__repr__()
因為它能提供對象的明確信息,對調試至關重要。
按需實現__str__()
如果需要一個用戶友好的輸出,再額外實現該方法。
保持一致性
__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)
__str__()用于用戶友好的輸出,__repr__()用于開發者調試。__repr__(),再根據需要實現__str__()。掌握這兩個魔術方法的使用,能夠讓你的Python類更加專業和易用! “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。