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'
答案 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
设置为值level
,name
设置为somename
。