__str__
是 Python 中的一個特殊方法,用於定義物件的字串表示形式。這個方法允許你控制當你嘗試列印或以字串形式表示一個物件時,應該顯示什麼內容。簡單來說,__str__
方法定義了物件的“可讀性”或“友好表示”。
1. 作用
-
當你列印一個物件(例如
print(obj)
),或在互動式 Python 環境中輸入物件的名字時,Python 會自動呼叫該物件的__str__
方法,來獲取該物件的字串表示形式。 -
這是非常有用的,特別是當你需要給物件提供一種清晰、易讀的輸出時。
2. 例子
假設你有一個 Question 類,表示問題的模型(例如 Django 中的模型類),你可能會這樣定義 __str__
方法:
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField("date published")
def __str__(self):
return self.question_text
在這個例子中,__str__
方法返回了問題文字(question_text)。所以,當你列印一個 Question 物件時,它會顯示問題的文字,而不是預設的物件記憶體地址或其他資訊。
例子輸出:
>>> q = Question(question_text="What's your name?", pub_date="2024-11-24")
>>> print(q)
What's your name?
這樣,你在除錯或列印物件時,就能看到更有意義的資訊,而不僅僅是一個預設的記憶體地址表示。
3. 預設行為
-
如果你沒有定義
__str__
方法,Python 會使用預設的字串表示,通常是物件的記憶體地址(例如:<__main__.Question object at 0x7f1b2d1fcd30>
)。 -
透過定義
__str__
,你可以避免這種預設輸出,並使你的物件在輸出時更具可讀性。
4. 在 Django 中的應用
-
在 Django 中,
__str__
方法經常用於模型類。當你在 Django Admin 或者查詢集檢視中顯示模型例項時,__str__
方法會決定該例項如何顯示。 -
比如,若你有一個 Question 模型,定義了
__str__
方法返回 question_text,那麼在 Django Admin 中檢視 Question 物件時,會顯示問題的文字,而不是模型的預設識別符號。class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField("date published") def __str__(self): return self.question_text
這樣,Django 在展示 Question 物件時,顯示的將是 question_text 欄位的值,而不是物件的記憶體地址。
5. 總結
-
__str__
方法提供了一個自定義的物件字串表示,方便除錯和展示。 -
它在 Python 和 Django 中被廣泛應用,特別是在資料模型中,用來提高物件的可讀性。
-
定義
__str__
時,返回值應當是一個描述該物件的簡潔且有意義的字串。