2014-02-16 28 views
0

首先我想提一提的是,我对Python完全陌生,并且发现从C++转换有点困难。如果我的问题是基本的,我很抱歉。Python类 - 设置和删除方法?

我有一个'歌'类,我已经初始化如下。它从包含歌曲的ID,名称,流派等的文件获取数据,全部由::分隔。

def __init__(self): 
      self.song_names = dict() 
      self.song_genres = dict() 

    def load_songs(self, song_id): 
      f = open(song_id) 
      for line in f: 
        line = line.rstrip() 
        component = line.split("::") 
        sid = components[0] 
        same= components[1] 
        sgenre=components[2] 
      self.song_names[mid] = sname 
      self.song_genres[mid] = sgenre 
      f.close() 

该方案还需要在数据从与“用户”的信息的文件,分离出作为 UserID::Gender::Age::Occupation::Zip等,并用“评分”的文件。

我我会实现诸如功能高清set_song(SID,列表((标题,流派))) 和类似delete_song(SID)?我将不得不结束更多的其他功能,但如果有人能够帮助我解决这两个问题 - 至少要更好地理解结构和语法,处理其他问题应该更容易。

+0

很难说如何在您不说出想要他们做什么时执行这些操作。你是说你想调用'set_user'来更改用户文件的内容吗?这与你粘贴的歌曲代码有什么关系? – BrenBarn

+1

提示:Python已经解包,你可以写'sid,name,genre = components [:3]' –

+0

因为我从这些文件中取数据并将它们加载到字典中(因此在__init__中),我想设置他们通过该方法在字典中。 – user3295674

回答

0

为什么不从dict继承并使用它的接口?通过这种方式,您可以使用Python的标准映射操作,而不是滚动自己的:

class Songs(dict): 

    def load(self, song_id): 
     with open(song_id, 'r') as f: 
      for line in f: 
       sid, name, genre = line.rstrip().split('::')[:3] 
       self[sid] = [name, genre] 

mysongs = Songs() 
mysongs.load('barnes_and_barnes__fish_heads') 
mysongs['barnes_and_barnes__fish_heads'] = ['roly poly', 'strange'] # set 
del mysongs['barnes_and_barnes__fish_heads']       # delete