如何以可读形式访问Album实例tracks中的Song对象?
如何以可读形式访问Album的tracks列表?
Hey Igor,我来帮你搞定这个问题!你现在看到<__main__.Song at 0x4a9ef90>这类输出,是因为Python默认打印对象时,只会显示它的类名和内存地址——它并不知道你想看到歌曲的具体信息呀。另外还要先把你代码里Album类中被注释掉的self.tracks = []打开,不然调用add_track会直接报错哦。
下面是具体的解决方案:
一、给Song类添加字符串转换方法
我们只需要给Song类添加__str__或__repr__方法,告诉Python怎么把Song对象转换成人类可读的字符串。
方案1:添加__str__(用户友好型,适合直接打印)
修改后的Song类代码:
class Song: def __init__(self, title, artist, album, track_number): self.title = title self.artist = artist self.album = album self.track_number = track_number # artist.add_song(self) def __str__(self): # 按「曲目编号:歌曲名 - 歌手」的格式返回 return f"Track {self.track_number + 1}: {self.title} - {self.artist.name}"
(这里把track_number+1是因为你在add_track里用len(self.tracks)作为初始编号,默认从0开始,+1后更符合日常的曲目编号习惯)
方案2:添加__repr__(开发者调试型,更严谨)
如果需要更偏向调试场景的输出,可以用这个:
class Song: def __init__(self, title, artist, album, track_number): self.title = title self.artist = artist self.album = album self.track_number = track_number # artist.add_song(self) def __repr__(self): return f"Song(title='{self.title}', artist={self.artist.name}, album='{self.album.title}', track_number={self.track_number + 1})"
二、修复Album类的初始化问题
把Album类中被注释的self.tracks = []取消注释,否则调用add_track时会找不到这个属性:
class Album: def __init__(self, title, artist, year): self.title = title self.artist = artist self.year = year self.tracks = [] # 取消这行的注释 # artist.add_album(self) def add_track(self, title, artist=None): if artist is None: artist = self.artist track_number = len(self.tracks) song = Song(title, artist, self, track_number) self.tracks.append(song)
三、访问可读的tracks列表
现在你创建实例并添加歌曲后,就可以用以下方式查看可读的列表了:
# 创建实例 my_artist = Artist("Taylor Swift") myalbum = Album("1989", my_artist, 2014) # 添加歌曲 myalbum.add_track("Shake It Off") myalbum.add_track("Blank Space") myalbum.add_track("Style") # 方式1:循环打印每首歌 print("专辑歌曲列表:") for track in myalbum.tracks: print(track) # 方式2:生成可读的字符串列表 track_list = [str(track) for track in myalbum.tracks] print("\n歌曲列表(列表形式):") print(track_list)
运行后会得到类似这样的输出:
专辑歌曲列表: Track 1: Shake It Off - Taylor Swift Track 2: Blank Space - Taylor Swift Track 3: Style - Taylor Swift 歌曲列表(列表形式): ['Track 1: Shake It Off - Taylor Swift', 'Track 2: Blank Space - Taylor Swift', 'Track 3: Style - Taylor Swift']
这样就能完全以可读形式查看专辑的歌曲列表啦!
内容的提问来源于stack exchange,提问作者igordr
相关产品推荐
相关产品推荐

