2017-04-05 52 views
1

我希望我的班級能夠自己創建對象,並且我看到'新的'可能會出現這種情況,但顯然它不起作用,因爲我收到此錯誤:__new__ = TypeError:object()不帶參數

類型錯誤對象()不帶任何參數

因此,有我的工作類,我也張貼這一切的情況下,它可能來自於代碼的另一部分。

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)) 
+1

當你需要控制新實例的創建時使用____new____。當你需要控制新實例的初始化時,使用____nit____。 – Surajano

+0

這裏似乎沒有必要定義'__new__'。你爲什麼這樣做? –

+0

錯誤消息如何不清楚? –

回答

3

的問題是完全錯誤信息說什麼: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() is intended mainly to allow subclasses of immutable types (like int, str, or tuple) to customize instance creation.

正如你Planete類不是一個一成不變的類型,你用__init__爲其定製,你不應該使用__new__在所有。