gpt4 book ai didi

Python类-属性继承

转载 作者:太空宇宙 更新时间:2023-11-03 15:49:58 24 4
gpt4 key购买 nike

我正在尝试使用类继承实现一个项目,其中父类是:

class radio:

def __init__(self, artist=None, track=None, genre=None):

self.artist = artist
self.track = track
self.genre = genre

然后我为每个属性创建方法(非工作示例):

    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

用户将在上面选择一个种子(仅一个),可以是艺术家track流派情绪,这就是为什么我用 None 初始化所有参数,而将参数值保留在继承级别插入。

继承的是:

class playlist(radio):

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

假设用户在命令行输入跟踪种子,我的脚本最终以全局变量开始:

track = 'karma police'

这样,所有其他属性(艺术家流派)仍保持

当我创建实例时,说:

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

关于Python类-属性继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com