[英]click TypeError: __init__() missing 1 required positional argument: 'name'
[英]__init__() missing 1 required positional argument: 'name'
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'
創建對象時,無需顯式調用__init__(...)
:
level = levelClass('Level 0')
它使用參數“級別0”隱式調用__init__(...)
,因此您無需在while
循環中執行此操作。
__init__
方法大致代表了Python中的構造函數,因此在您創建對象時,它只能執行一次。
編輯:總之,創建對象時不得調用__init__()
:
level = levelClass('Level 0')
它被隱式調用,因此要糾正您的問題,請刪除此行:
level.__init__()
levelClass.__init__
的定義如下:
def __init__(self, name):
因此它需要一個名稱參數。
因此,要么消除對
level.__init__()
(為什么仍然需要它?)或更改
level.__init__()
至
level.__init__(name)
為了name
價值。 僅當您希望在while-loop
每次迭代中更改level.name
,才使用此方法。 如果__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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.