【发布时间】:2017-01-01 11:35:31
【问题描述】:
我正在尝试使用class inheritance 实现一个项目,其中父类是:
class radio:
def __init__(self, artist=None, track=None, genre=None):
self.artist = artist
self.track = track
self.genre = genre
然后我为每个attribute 创建methods(非工作示例):
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 没有定义,我只需要继承 trackattribute,就像这样:
radio.__init__(self, track)
我知道我可以使用定义的全局变量启动脚本:
track = None
genre = None
artist = None
这将使我拥有:
radio.__init__(self, artist, track, genre)
但这在我看来是多余的......
是否有解决方法,无需将全局变量的初始值设置为None,将所有代码保留在类范围定义内?
【问题讨论】:
-
我在下面给出了答案,但很难说全局变量的替代方案是什么,因为您没有展示甚至描述您的代码如何从用户输入到创建一个名为的全局变量
tracks。一种可能性是让playlist也接受track、artist等,并让您的输入解析代码以类似于我在回答中描述的方式将字典传递给它。 -
@BrenBarn 我已经为你编辑了问题,以防你想编辑你的答案。
标签: python class inheritance