__new\=TypeError:object()不接受参数

2024-10-04 09:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望我的类能够自己创建对象,我看到了通过“new”实现这一点,但很明显,它不起作用,因为我遇到了以下错误:

类型错误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))

Tags: rectselfnewdefmathpygameclsx2
1条回答
网友
1楼 · 发布于 2024-10-04 09:21:05

问题正是错误消息所说的: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__。在

相关问题 更多 >