我希望我的类能够自己创建对象,我看到了通过“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))
问题正是错误消息所说的:
TypeError: object() takes no parameters
在您的
__new__
方法中,您调用object.__new__(cls, rayon, periode, envergure,look)
,这是(关于cls
参数)将被调用的object(rayon, periode, envergure, look)
。在直接的解决方法是将该行替换为:
但不管怎样,正如您在评论中所说,您没有真正的理由使用
__new__
这里:从Python语言引用中提取:由于您的
Planete
类不是一个不可变的类型,并且您使用__init__
进行定制,因此根本不应该使用__new__
。在相关问题 更多 >
编程相关推荐