Python错误:__ init __()至少需要5个参数(给定4个)

时间:2017-05-31 13:20:48

标签: python class

所以我搜索了这些问题中的每一个,但我找不到任何帮助我的东西。

我还是相对较新的Python,我有一个简单的对话框显示一些文本:

var images=Array("1.png","2.jpg","3.png");
var visibleImage=0;
var a = document.getElementById("link");

function change()
{ 
    img = document.getElementById("image");
    visibleImage++;
    if(visibleImage>=images.length)
    {
        visibleImage=0;
    }
    img.src=images[visibleImage];
    
    console.log(img.src);
}

无论如何,我接着

<img src="1.png" onclick="change();" id='image'>
<a href="#" onclick="change();">Click to change</a>

并获得错误

class DialogueBox(object):
    def __init__(self, text, font, size, wh, pos="center", padding=20):
        self.text = text
        self.font = font
        self.size = size
        self.width = wh[0]
        self.height = wh[1]

        self.image = pygame.image.load("img/dialogue_box_background.png")
        self.image = pygame.transform.scale(self.image, (self.width, self.height))

        if pos == "center":
            self.pos[0] = screensize[0] - (self.width / 2)
            self.pos[1] = screensize[1] - (self.height / 2)
        else:
            self.pos = pos

        self.textpos = tuple(self.pos[0] + (padding / 2), self.pos[1] + (padding / 2))
        self.rect = pygame.Rect(self.pos[0], self.pos[1], self.width, self.height)

        self.textfont = pygame.font.Font(font,size)
        self.textsurf = self.textfont.render(text, 1, (255,255,255))

        if self.textsurf.get_width() > (width - padding):
            self.mode = "long"
        else:
            self.mode = "short"

    def draw(self):
        screen.blit(self.image, self.pos)
        if self.mode == "short":
            textfunc(self.text, self.font, (self.textpos[0] + (self.width / 2), self.textpos[1] + (self.height / 2), (255,255,255)))
        else:
            blit_text(screen, self.text, self.textpos, self.textfont, pygame.Color("white"))

这非常奇怪,因为该类只有4个必需参数。

真的很抱歉,如果这是一个愚蠢的问题,但我不明白为什么我会收到此错误。

编辑:我现在看到我实际上是愚蠢和监督,我没有传递足够的论据,我确信我做到了。谢谢你的回答,抱歉浪费你的时间。

3 个答案:

答案 0 :(得分:3)

你只传递了三个参数。 (100,100)是一个元组(一个参数而不是两个)。

哈努哈利

答案 1 :(得分:2)

opts_rsto_box = DialogueBox(curlang["cfdial"][0],genfont,(100,100))

(100,100)是一个元组,它只是一个参数,而不是两个不同的参数。

答案 2 :(得分:1)

第五个参数是self本身,它会自动传递。您没有在构造函数中传递wh参数。可能是作为一个参数的元组(100,100)应该被分成两个独立的元组以符合构造函数签名。