(主页有对应知识点^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__
更适合给用户看。