You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以可读形式访问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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:51:39