簡體   English   中英

__init __()缺少1個必需的位置參數:“名稱”

[英]__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM