Ich versuche, ein Projekt mit class inheritance
zu implementieren, wo Elternklasse ist:Python-Klasse - Attribut Vererbung
class radio:
def __init__(self, artist=None, track=None, genre=None):
self.artist = artist
self.track = track
self.genre = genre
dann ich methods
für jede attribute
(nicht Arbeitsbeispiele) zu erstellen:
def seed_artist(self):
results = api.search(q=self.artist, type='artist')
return results
def seed_track(self):
results = api.search(q=self.track, type='track')
return results
def seed_genre(self):
results = api.search(q=self.genre, type='genre')
return results
der Benutzer wird einen Samen über (nur einen) auswählen, sei es artist
, track
, genre
oder mood
, und deshalb initialisiere ich alle Argumente mit None
, wobei der Argumentwert auf der Vererbungsebene eingefügt wird.
die geerbte class
ist:
class playlist(radio):
def __init__(self,user):
radio.__init__(self, artist, track, genre)
lässt ein Benutzereingaben sagen auf der Kommandozeile track seed
, und mein Skript endet mit einer globalen Variablen Inbetriebnahme:
track = 'karma police'
diese Weise alle anderen Attribute (artist
, genre
) bleiben None
.
, wenn ich eine Instanz erstellen, sagen:
jeff = playlist('Jeff Smith')
Es wirft einen Fehler sagen, dass genre
und artist
nicht definiert sind, und ich würde nur track
Attribut erben haben, etwa so:
radio.__init__(self, track)
ich weiß, ich könnte das Skript mit globalen Variablen starten definiert:
track = None
genre = None
artist = None
und dies würde erlauben Sie mir zu haben:
radio.__init__(self, artist, track, genre)
aber mir scheint eher überflüssig ...
Gibt es eine Abhilfe dies, ohne die Notwendigkeit für Anfangswerte der globalen Variablen auf None
den gesamten Code innerhalb der Klassenbereichsdefinitionen behalten?
Ich habe unten eine Antwort, aber es ist schwer zu sagen, was die Alternative für die globalen Variablen ist, weil Sie nicht haben gezeigt, oder Sie haben sogar beschrieben, wie Ihr Code von Benutzereingaben zu einer globalen Variablen namens 'tracks' gelangt. Eine Möglichkeit besteht darin, zu bewirken, dass "Playlist" auch "Track", "Interpret" usw. akzeptiert und dass Ihr Eingabe-Parsing-Code ein Diktat ähnlich wie in meiner Antwort beschrieben übergibt. – BrenBarn
@BrenBarn Ich habe die Frage für Sie bearbeitet, falls Sie Ihre Antwort bearbeiten möchten. –