簡體   English   中英

__new__ = TypeError:object()不帶參數

[英]__new__ = TypeError: object() takes no parameters

我希望我的類能夠自己創建對象,我看到這可能是' new ',但顯然它不起作用,因為我收到此錯誤:

TypeErrorobject()不帶參數

所以有我正在使用的類,我會發布所有這些,以防它可能來自代碼的另一部分。

class Planete:

    def __new__(cls, rayon, periode, envergure,look):


        print("test __new__ of the class {}".format(cls))

        return object.__new__(cls, rayon, periode, envergure,look)

    def __init__(self,rayon,periode,envergure,look):

        self.rayon = rayon
        self.periode = periode
        #self.couleur = couleur
        self.envergure = envergure
        self.omega = (2*math.pi)/self.periode
        self.i = 0

        self.look = pygame.transform.rotozoom(look,0,self.envergure)

        self.rect = pygame.Rect((0, 0), (0, 0))

        #self.surf = pygame.Surface(self.rect.size)

    def tourner(self) :

        self.x = self.rayon*math.cos(self.omega*self.i)
        self.x2 = int(self.x)+600
        self.y = self.rayon*math.sin(self.omega*self.i)
        self.y2 = int(self.y)+300
        self.i = self.i + 1

        self.rect = pygame.Rect((self.x2, self.y2), (50, 50))

    def dessiner(self):
        #pygame.draw.circle(gameDisplay,(self.couleur),((self.x2, self.y2)), self.envergure)
        #gameDisplay.blit(self.surf,self)
        gameDisplay.blit(self.look,(self.x2, self.y2))

問題正是錯誤消息所說的: TypeError: object() takes no parameters

在你的__new__方法中,你調用object.__new__(cls, rayon, periode, envergure,look) ,這是(與cls參數有關) object(rayon, periode, envergure, look)

直接修復是用以下內容替換該行:

    return object.__new__(cls)

但無論如何,正如你在評論中所說,你沒有真正的理由在這里使用__new__ :從Python語言參考中提取:

new ()主要用於允許不可變類型的子類(如int,str或tuple)自定義實例創建。

由於您的Planete類不是不可變類型,並且當您使用__init__進行自定義時,您根本不應該使用__new__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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