Python类-属性继承

8位博尔赫斯

我正在尝试使用实施项目class inheritance,其中父类为:

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

用户会挑以上(只有一个)种子,无论是它artisttrackgenre或者mood,这就是为什么我初始化所有参数None,使参数值在继承级别插入。

继承的class是:

class playlist(radio):

    def __init__(self,user):
        radio.__init__(self, artist, track, genre)

假设用户在命令行a处输入了内容track seed,我的脚本最终以全局变量开头:

track = 'karma police'

这样,所有其他属性(artistgenre)都会保留None

创建实例时,请说:

jeff = playlist('Jeff Smith')

它会抛出一个错误,指出genreartist没有定义,我将不得不只继承track属性,就像这样:

radio.__init__(self, track)

我知道我可以使用定义的全局变量启动脚本:

track = None
genre = None
artist = None

这将使我拥有:

radio.__init__(self, artist, track, genre)

但这在我看来似乎是多余的...

是否有解决方法,不需要将全局变量的初始值设置为None,而将所有代码保留在类范围定义内?

布伦·巴恩

代替对每个字段使用单独的全局变量,对所有字段使用单个字典。然后,您可以将字典作为关键字参数传递。

也就是说,不要创建名为的全局变量artist,而创建名为radio_fields的字典用户输入查询时,请在此字典上设置一个键:

radio_fields = {}
...
# when you get the user's command
radio_fields['track'] = 'Karma Police'

现在您可以致电radio.__init__(self, **radio_fields)无论键在哪里,都将作为参数传递radio_fields如果只有一个,则只会传递一个,而其他的将采用您在定义时定义的默认值radio.__init__

也许可以使用更好的方法来构建整个程序,但是根据您在此处显示的内容很难说。例如,目前尚不清楚为什么playlist只接受一个user参数。如果playlist接受了所有接受的字段参数radio,它可以radio毫无问题地传递给它们

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章