Я пытаюсь реализовать проект с использованием class inheritance
, где родительский класс:Python класса - наследование атрибутов
class radio:
def __init__(self, artist=None, track=None, genre=None):
self.artist = artist
self.track = track
self.genre = genre
Затем я создаю methods
для каждого attribute
(не рабочих примеров):
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
пользователь будет выбирать семя выше (только одно), будь то artist
, track
, genre
или mood
, и именно поэтому я инициализирую все аргументы с помощью None
, оставляя значение аргумента для ввода на уровне наследования.
унаследованный class
является:
class playlist(radio):
def __init__(self,user):
radio.__init__(self, artist, track, genre)
позволяет говорить о данных, вводимых пользователем на командной строке track seed
, и мой сценарий заканчивается, начиная с глобальной переменной:
track = 'karma police'
Таким образом, все другие атрибуты (artist
, genre
) есть None
.
когда я создаю экземпляр, скажем:
jeff = playlist('Jeff Smith')
Он выдаст ошибку о том, что genre
и artist
не определены, и я бы наследовать только track
атрибут, например, так:
radio.__init__(self, track)
Я знаю, что я мог запустить сценарий с глобальными переменными определено:
track = None
genre = None
artist = None
и это позволило бы мне иметь:
radio.__init__(self, artist, track, genre)
, но это кажется мне довольно резервированной ...
Есть обходной путь это, без необходимости начальных значений глобальных переменных набора в None
, сохраняя весь код в определениях класса?
Я дал ответ ниже, но это трудно сказать, что альтернатива для глобальных переменных, потому что вы не показали или даже описал, как ваш код получает от пользователя ввод для создания глобальной переменной, называемой 'tracks'. Одна из возможностей заключается в том, чтобы «playlist» также принимал «track», «artist» и т. Д., И ваш код анализа ввода передавал ему запрос таким же образом, как я описал в своем ответе. – BrenBarn
@BrenBarn Я отредактировал вопрос для вас, если вы захотите отредактировать свой ответ. –