gpt4 book ai didi

python-2.7 - 尝试调用 def 时,我得到 : parameter 'self' unfilled

转载 作者:行者123 更新时间:2023-12-04 03:57:19 25 4
gpt4 key购买 nike

关闭。这个问题需要debugging details .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

4年前关闭。



Improve this question




我正在尝试编写一个类来从字典中随机挑选一些歌曲。它的全部意义在于能够简单地输入 DJ.chooseListing()例如执行随机选择。唉,它给了我一个错误,我在网络上的任何其他地方都找不到,我觉得答案很简单。

class DJ:
# put song variables here in this format: trackName = Track("string of song to be displayed", 'music/filename.ogg')
trackRickAstleyNever = Track("Never gonna give you up", 'music/rick.ogg')
trackShootingStars = Track("Shooting Stars", 'music/shoot.ogg')

dictSongs = {
# put songs here like this: 'name': varName,
'nevergonnagiveyouup': trackRickAstleyNever,
'shootingstars': trackShootingStars,

}
"""
arrayRandomized = [
# Put future songs here in this format: songs['name'],
]
"""
arrayChosen = []
trackChosen = ""

def chooseListing(self):
for i in xrange(4):
self.arrayChosen.append(random.choice(self.dictSongs))

def chooseTrack(self):
self.trackChosen = random.choice(self.arrayChosen)

DJ.chooseListing()

最佳答案

在类中定义的函数是一个方法。当您在类的实例上调用方法的第一个参数时,将自动填充该方法的第一个参数。您正在定义 chooseListing方法,但是当您调用它时,您并不是在创建实例。如果没有实例,则没有任何东西可以作为 self 传递,这会导致您的异常。尝试:

dj = DJ()
dj.chooseListing()

不过,您可能仍然需要对您的类进行一些其他修复,因为目前它的所有属性都是类属性(由所有实例共享)。如果您创建多个 DJ实例,它们都将共享相同的 arrayChosen列表,这可能不是您想要的。您应该将您的作业移至 __init__方法,您可以在其中使它们成为实例属性(通过在 self 上分配):
def __init__(self):
self.dictSongs = { # this might still make sense as a class attribute if it is constant
'nevergonnagiveyouup': trackRickAstleyNever,
'shootingstars': trackShootingStars,
}
self.arrayChosen = [] # these however should certainly be instance attributes
self.trackChosen = ""

我离开了 Track __init__ 之外的实例方法,但如果它们具有不应在 DJ 之间共享的内部状态,则这可能不正确。

关于python-2.7 - 尝试调用 def 时,我得到 : parameter 'self' unfilled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425892/

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