我试图用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我已经为你编辑了这个问题,以防你可能想编辑你的答案。 –