我試圖用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'的全局變量。一種可能性是讓「播放列表」也接受「軌道」,「藝術家」等,並讓你的輸入解析代碼以類似於我在答案中所描述的方式傳遞一個字典。 – BrenBarn
@BrenBarn我已經爲你編輯了這個問題,以防你可能想編輯你的答案。 –