python中的__str__

hisun9發表於2024-11-24

__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__ 時,返回值應當是一個描述該物件的簡潔且有意義的字串。

相關文章