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