为什么Python打印自定义Book类实例列表输出内存地址而非书籍信息?
问题原因
执行print(lib.books)时输出类实例内存地址,是因为Python打印自定义类的实例时,默认输出类名+内存地址的标识格式,未给Book类定义自定义字符串表示方法的前提下,不会输出书籍属性信息。
解决方法
给Book类添加__repr__方法即可(列表打印元素时默认调用该方法),如果需要单独打印单个Book实例时输出更友好的文本,可额外添加__str__方法。
修改后的完整代码如下:
class Book: def __init__(self, name, author, code): self.name = name self.author = author self.code = code self.available = True # 列表打印Book实例时调用该方法输出属性信息 def __repr__(self): return f"Book(name='{self.name}', author='{self.author}', code={self.code}, available={self.available})" # 可选:单独打印Book实例时调用,输出可读性更高的文本 def __str__(self): return f"《{self.name}》 作者:{self.author} 编号:{self.code} {'可借阅' if self.available else '已借出'}" class Library: def __init__(self): self.books = [] def addBook(self, book): self.books.append(book) algebra = Book('Algebra for beginners', 'Albert Einstein', 123) lib = Library() lib.addBook(algebra) print(lib.books) # 输出:[Book(name='Algebra for beginners', author='Albert Einstein', code=123, available=True)] print(algebra) # 输出:《Algebra for beginners》 作者:Albert Einstein 编号:123 可借阅
- 仅需要打印书籍列表展示属性的场景下,保留
__repr__即可 - 可根据业务需求自定义两种方法的输出格式
内容的提问来源于stack exchange,提问作者eric22
相关产品推荐
相关产品推荐

