Сохранить все значения, добавленные методом, в отдельной переменной

#python-3.x #class #methods

#python-3.x #класс #методы

Вопрос:

Я хочу создать метод, который добавляет строку в мою переменную. В настоящее время у меня есть следующее

 class Album :
    def __init__(self,nbr,nbr_songs):
        self.header = 'Album '   str(nbr)   ' ('   str(nbr_songs)   ' songs)')
    
    def add(self,song,n):
        self.line = song
        self.nbre = n     # This is the count of how many song there is

    def __str__(self):
        s = self.header
        s  = 'n'   "{:02}".format(self.nbre)   ': '   str(self.line)
        return s
  

Требуемый результат следующий

 Album 1 (3 songs)
01: White_Wedding - Billy_Idol - 00:04:12
02: Stand_And_Deliver - Adam_amp;_The_Ants - 00:03:33
03: You_Spin_Me_Around - Dead_Or_Alive - 00:03:14
  

Проблема в том, что когда я добавляю три песни в альбом одну за другой, он возвращает следующее.

 Album 1 (3 songs)
01: You_Spin_Me_Around - Dead_Or_Alive - 00:03:14
  

Я знаю, что в моем коде чего-то не хватает, но я не могу понять, чего.

Ответ №1:

Это ни в коем случае не идеальное решение, но я думаю, что было бы определенным улучшением создать отдельный Song класс и, возможно, даже Artist один, и иметь список песен в вашем Album классе:

 class Song:

    def __init__(self, title, artists, duration, album, track_number):
        self.title = title
        self.artists = artists
        self.duration = duration
        self.album = album
        self.track_number = track_number

    def __str__(self):
        return f'{self.track_number:02}: {self.title} - {self.artists} - {self.duration}'


class Album:

    def __init__(self, number):
        self.number = number
        self.songs = []

    def add_song(self, title, artists, duration):
        track_number = len(self.songs)   1
        song = Song(title, artists, duration, self, track_number)
        self.songs.append(song)

    def __str__(self):
        header = f'Album {self.number} ({len(self.songs)} songs)'
        str_list = [header]
        for song in self.songs:
            str_list.append(str(song))
        return 'n'.join(str_list)


album = Album(1)
album.add_song('White_Wedding', 'Billy_Idol', '00:04:12')
album.add_song('Stand_And_Deliver', 'Adam_amp;_The_Ants', '00:03:33')
album.add_song('You_Spin_Me_Around', 'Dead_Or_Alive', '00:03:14')
print(album)
  

Вывод:

 Album 1 (3 songs)
01: White_Wedding - Billy_Idol - 00:04:12
02: Stand_And_Deliver - Adam_amp;_The_Ants - 00:03:33
03: You_Spin_Me_Around - Dead_Or_Alive - 00:03:14
  

Комментарии:

1. Это идеально подходит для моего варианта использования… Большое вам спасибо!