У меня есть список воспроизведения песен, и я хотел бы создать экземпляр класса SongData для каждой песни в плейлисте. У меня есть код, который не включен, который извлекает название песни, исполнителя и каталог песни из списка воспроизведения. Для целей этого вопроса я включил их как 3 списка, имена песен, имена ArtistNames, dirNames.Как распечатать __str__ для каждого экземпляра класса в цикле
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}
Я хотел бы иметь возможность распечатать desc_str для каждой песни, так что кажется, как это:
Title: song1
Artist: artist1
Directory: dir1
Но до сих пор мне удалось только позвонить одну категорию данных сразу, так он печатает Название: song1, но оставляет поля Artist:
и Directory:
незаполненными. Я использую:
print songs['song1']
print artists['artist1']
Как я могу распечатать их сразу? Я думаю, проблема в том, что я только ссылаюсь на данные в каждом словаре, не называя экземпляр класса, относящегося к этой песне.
Когда я делаю это просто и вручную, как показано ниже, она работает, но я не могу понять, как поместить это в петлю, так что будет работать для списков songNames
, artistNames
, dirNames
.
p = SongData('song1', 'artist1', 'dir1')
p.__str__()
Спасибо! Является ли 'SongData (* params)' распаковкой 'params' для использования в качестве аргументов в' SongData'? –
@NickCamps это называется, «распаковка», но вы получили идею –