Eva*_*per 4 python merge arguments class object
我试图弄清楚如何将两个对象“合并”在一起。我的目标是合并两个Album对象(下面的代码)。我需要能够合并tracks多个Album对象的参数(列表),只有当对象的“标题”参数相Album同时。
基本上,如果我有一个参数Album长度tracks为 1 的对象和另一个参数长度也是 1 的专辑对象tracks,那么新的或更新的单数Album对象需要有tracks一个长度为 2的参数。
我已经发布了我的代码来展示对象是如何定义的。
提前致谢!
编辑:由于tracks参数列表中的每个元素都是歌曲名称,我想保留相同的元素并将它们放在新的或更新的tracks参数中。我需要将每个对象的确切元素放入这个“新”对象中,而不是仅仅改变元素的数量。
class Album(object) :
def __init__(self, artist, title, tracks = None) :
tracks = []
self.artist = artist
self.title = title
self.tracks = tracks
def add_track(self, track) :
self.track = track
(self.tracks).append(track)
print "The track %s was added." % (track)
def __str__(self) :
if len(self.tracks) == 1 :
return "Artist: %s, Album: %s [" % (self.artist, self.title) + "1 Track]"
return "Artist: %s, Album: %s [" % (self.artist, self.title) + str(len(self.tracks)) + " Tracks]"
Run Code Online (Sandbox Code Playgroud)
合并算法必须知道类的内部数据结构。因此,将合并代码放在类中似乎是合乎逻辑的。下面的代码做到了这一点,并允许合并两个专辑,只需添加它们 ( album1 + album2):
class Album(object) :
def __init__(self, artist, title, tracks = None) :
self.artist = artist
self.title = title
self.tracks = tracks
def add_track(self, track) :
self.track = track
(self.tracks).append(track)
print "The track %s was added." % (track)
def __str__(self) :
if len(self.tracks) == 1 :
return "Artist: %s, Album: %s [" % (self.artist, self.title) + "1 Track]"
return "Artist: %s, Album: %s [" % (self.artist, self.title) + str(len(self.tracks)) + " Tracks]"
def __add__(self, other):
if self.artist != other.artist or self.title != other.title:
raise ValueError("Albums are incommensurable")
return Album(self.artist, self.title, self.tracks + other.tracks)
Run Code Online (Sandbox Code Playgroud)
其用法如下:
>>> a = Album('Joe', "Joe's First", tracks=['Beer', 'Trucks'])
>>> b = Album('Joe', "Joe's First", tracks=['Bourbon', 'Tequila'])
>>> complete = a + b
>>> print complete
Artist: Joe, Album: Joe's First [4 Tracks]
>>> complete.tracks
['Beer', 'Trucks', 'Bourbon', 'Tequila']
Run Code Online (Sandbox Code Playgroud)