__init __()缺少1个必需的位置参数:'name'

时间:2014-01-02 18:48:23

标签: python class init

import pygame
from pygame.locals import *

pygame.init()

class levelClass(object):
    def __init__(self, name):
        self.name = name

此窗口的初始名称

def makeWindow(self):
    screen = pygame.display.set_mode((800,800))
    pygame.display.set_caption(self.name)

def drawName(self):
    myfont = pygame.font.SysFont("monospace", 25)
    label = myfont.render(self.name, 1, (255,0,0))
    screen.blit(label, (400,400))

level = levelClass('Level 0')
while True:
    level.__init__()
    level.drawName()
    level.makeWindow()
    for event in pygame.event:
        if event.type == QUIT:
            pygame.exit()
            sys.close()
    pygame.display.update()

这将创建一个名为Level 0的窗口并在窗口中写入,但我看到此错误: init ()缺少1个必需的位置参数:'name'

2 个答案:

答案 0 :(得分:6)

创建对象时,无需显式调用__init__(...)

level = levelClass('Level 0')

它使用参数“Level 0”隐式调用__init__(...),因此您不需要在while循环中执行此操作。

__init__方法大致代表Python中的构造函数,因此在创建对象时,它应该只执行一次。

修改 总之,在创建对象时,不得调用__init__()

level = levelClass('Level 0')

它被隐式调用,所以要纠正你的问题,删除这一行:

level.__init__()

答案 1 :(得分:1)

levelClass.__init__的定义如下:

def __init__(self, name):

所以它需要一个名字参数。

所以要么取消对

的调用
level.__init__()

(为什么还需要它?)或更改

level.__init__()

level.__init__(name)

表示name的某些值。只有当您希望在level.name的每次迭代中更改while-loop时,才会使用此选项。如果__init__方法中有更多内容发生,而不仅仅是设置

,这可能很有用
self.name = name

- 例如,如果__init__为每个级别加载了不同的地图。如果__init__所做的只是设置名称,那么您无需致电__init__来更改name属性;你可以直接设置它:

level.name = somename

PS。当一个实例(例如level)像这样调用方法__init__时:

level.__init__(somename)

Python调用

levelClass.__init__(level, somename)

因此self设置为值levelname设置为somename