(主頁有對應知識點^V^)
【練習要求】
針對知識點Python面向對象的魔法方法安排的本實例。要求實現:用__init__魔法方法定義書的長,寬,高,最后用__str__輸出返回值
【重要步驟提示】
- 定義class書類
? ? ?2、使用init定義屬性
? ? ?3、用str的到返回值
? ? ?4、編寫代碼如下:
# 定義書類
class Book:# 初始化方法,定義長、寬、高def __init__(self, length, width, high):self.length = lengthself.width = widthself.high = high# 設置書的輸出方法def book_print(self):print(f"書的長是{self.length}厘米")print(f"書的寬是{self.width}厘米")print(f"書的高是{self.high}厘米")# 使用__str__魔法方法返回字符串def __str__(self):return f"書的長是{self.length}厘米,寬是{self.width}厘米,高是{self.high}厘米"# 使用__repr__魔法方法def __repr__(self):return f"書長:{self.length}厘米,寬:{self.width}厘米,高:{self.high}厘米"# 建立對象
book = Book(20, 3, 10)
# 調用屬性方法打印信息
book.book_print()
# 輸出結果(調用__str__)
print(book)
# 調用__repr__
print(repr(book))
【相關知識】
__init__
:構造函數,用于初始化對象。__str__
:用于返回對象的可讀字符串表示形式,主要面向用戶。__repr__
:用于返回對象的“官方”字符串表示形式,主要面向開發者,通常用于調試。
【詳解】
# 初始化方法,定義長、寬、高def __init__(self, length, width, high):self.length = lengthself.width = widthself.high = high
- 類的構造函數(初始化方法)。
- 創建?
Book
?對象時會自動調用這個方法。 - 參數?
length
,?width
,?high
?分別代表書的長、寬、高。 self.length = length
?等語句將傳入的參數值保存為對象的
# 使用__str__魔法方法返回字符串def __str__(self):return f"書的長是{self.length}厘米,寬是{self.width}厘米,高是{self.high}厘米"
- 當使用?
print(book)
?或?str(book)
?時,會調用這個方法。 - 返回的是一個對用戶友好的字符串描述。
- 用于展示對象的“直觀”表示。
# 使用__repr__魔法方法def __repr__(self):return f"書長:{self.length}厘米,寬:{self.width}厘米,高:{self.high}厘米"
- 當使用?
repr(book)
?或在交互式解釋器中直接輸入對象名時會調用這個方法。 - 返回的是一個更精確、可用于調試和開發的字符串。
- 通常建議?
__repr__
?的輸出應能唯一標識該對象,并且盡可能完整
__str__和__repr__對比
總結對比
方法 | 用途 | 輸出示例 |
---|---|---|
__str__ | 用戶友好型輸出 | "書的長是20厘米,寬是3厘米,高是10厘米" |
__repr__ | 開發者友好型輸出,用于調試/重建對象 | "書長:20厘米,寬:3厘米,高:10厘米" |
💡 小貼士
- 如果沒有定義?
__str__
,Python 會默認使用?__repr__
。 - 如果兩個都沒有定義,則會輸出類似?
<__main__.Book object at 0x...>
?的地址信息。 - 在調試時,
__repr__
?往往更有用;在程序運行時,__str__
?更適合給用戶看。