2016-11-14 2 views
-1

Ich baue eine class von Wiedergabelisten, die viele Wiedergabelisten des gleichen Genres enthalten wird.Python - Erstellen und instanziieren Klasse

class playlist(object): 
     def __init__(self,name): 
     self.name = name 

Ich möchte sie das Bestehen der Benutzer instanziiert:

 def hard_rock(self,user): 
     self.user = user 
     #query and retrieve data from music API 
     #return playlist 

     def pop_rock(self,user): 
     self.user = user 
     #query and retrieve data from music API 
     #return playlist 

     #and so on 

erstellen Beispiel:

r = playlist('rock') 
r.hard_rock('user1') 

ist dies eine logische Art und Weise des Bauens und instanziieren Klassen?

+0

Was erwarten Sie davon? 'pop_rock' und' hard_rock' machen beide genau dasselbe. –

+0

"__init __()": P Edit: nvm, verschiedene var –

+0

Wenn eine Instanz erstellt wird, sollte sie vollständig verwendbar sein. In Ihrem Fall ist es nicht: Sie müssen eine andere Methode aufrufen. Sie sollten diese Attribute in der '__init __()' Methode initialisieren. – kindall

Antwort

2

Wenn ich richtig verstehe, wollen Sie Wiedergabelisten und Benutzer

class Playlist(object): 
    def __init__(self, name): 
     self.name = name 
     self.liked_by = list() 

    @classmethod 
    def get_genre(cls, genre): 
     # this relies on no instance of this class 
     pass 
     # return api data... 

class User(object): 
    def __init__(self, name): 
     self.name = name 

    def likes_playlist(self, playlist): 
     playlist.liked_by.append(self.name) 

Und dann einige Beispiele

playlists = list() 
hard_rock = Playlist('hard_rock') 

joe = User('joe') 
joe.likes_playlist(hard_rock) 

playlists.append(hard_rock) 
playlists.append(Playlist('pop_rock')) 

country = Playlist.get_genre('country') 
1

So etwas wie dies möglich wäre, wenn Wiedergabelisten die Kernkomponente der Anwendung sind (sehr einfaches Beispiel mit Klassenvererbung).

>>> class playlist: 
...  def __init__(self,name, user): 
...   self.name = name 
...   self.user = user 
... 
>>> class hardrock(playlist): 
...  def __init__(self,name, user): 
...   playlist.__init__(self, name, user) 
... 
>>> test = hardrock('my_awesome_hardrock_list', 'my_awesome_username') 
>>> print test.name 
my_awesome_hardrock_list 
>>> print test.user 
my_awesome_username 

Sie könnten beginnen nur Zeichenfolgen für Benutzer verwenden und später ersetzen sie mit realen Objekten und eine Art von Beziehungen zwischen Wiedergabelisten und Benutzer hinzuzufügen. Siehe den Vorschlag von cricket_007 für weitere Ideen.

Verwandte Themen