__new__ = TypeError:object()不带参数

时间:2017-04-05 14:25:22

标签: python class object pygame

我希望我的课程能够自己创建对象,我看到这可以使用' 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 个答案:

答案 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 ()主要用于允许不可变类型的子类(如int,str或tuple)自定义实例创建。

由于您的Planete类不是不可变类型,并且当您使用__init__进行自定义时,您根本不应使用__new__