如何在循环中为类的每个实例打印出

2024-10-03 19:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个歌曲的播放列表,我想为播放列表中的每首歌曲创建一个类SongData的实例。我有未包含的代码,从播放列表中提取歌曲名称、艺术家和歌曲目录。为了这个问题的目的,我把这些列为3个列表,歌曲名,艺术家名,目录名。在

class SongData(object):
    def __init__(self, title="", artist="", directory=""):
        self.title, self.artist, self.directory = title, artist, directory
    def __str__(self):
        desc_str = "Title: %s \nArtist: %s \nDirectory: %s \n" %(self.title,
                                            self.artist, self.directory)
        print desc_str

songNames = ['song1', 'song2', 'song3']
artistNames = ['artist1', 'artist2', 'artist3']
dirNames = ['dir1', 'dir2', 'dir3']

songs = {name: SongData(title=name) for name in songNames}
artists = {band: SongData(artist=band) for band in artistNames}
directorys = {direc: SongData(directory=direc) for direc in dirNames}

我希望能打印出每首歌的描述,这样就可以这样了:

^{pr2}$

但到目前为止,我一次只能调用一个数据类别,所以它打印Title:song1,但是Artist:和{}部分留空。我一直在使用:

print songs['song1']
print artists['artist1']

我怎么能让它一次打印出来?我认为问题是我只引用了每个字典中的数据,而没有调用与那首歌相关的类的实例。在

当我像下面这样简单地手动执行它时,它可以工作,但是我不知道如何将它放入一个循环中,这样它就可以用于列表songNamesartistNamesdirNames。在

p = SongData('song1', 'artist1', 'dir1')
p.__str__()

Tags: nameselffortitleartist播放列表directoryprint
2条回答

您的SongData类需要从__str__函数中return

class SongData(object):
    def __init__(self, title="", artist="", directory=""):
        self.title, self.artist, self.directory = title, artist, directory
    def __str__(self):
        desc_str = "Title: %s \nArtist: %s \nDirectory: %s \n" %(self.title,
                                            self.artist, self.directory)
        return desc_str # <    RETURN HERE

然后,可以按如下方式构建SongData的实例:

^{pr2}$

请注意,以上是一个列表组件,给出的上述3个列表实际上相当于:

songdata = [
    SongData('song1', 'artist1', 'dir1'),
    SongData('song2', 'artist2', 'dir2'),
    SongData('song3', 'artist3', 'dir3')
]

然后循环这些,并使用print获得__str__的结果:

for song in songdata:
    print song

给你:

Title: song1 
Artist: artist1 
Directory: dir1 

Title: song2 
Artist: artist2 
Directory: dir2 

Title: song3 
Artist: artist3 
Directory: dir3 

或者也可以在__str__函数中打印for循环,然后返回空字符串。在

def __str__(self):
    for item in self.UserClasses:
        print item
    return ""

像这样的咒语对我有用。虽然可能不是最佳实践。在

相关问题 更多 >