2017-04-05 11 views
1

私のクラスはオブジェクトを単独で作成できるようにしたいと考えていましたが、これは 'new'で可能でしたが、このエラーが発生してから明らかに動作しません:__new__ = TypeError:object()はパラメータを取らない

TypeError例外:それは、コードの他の部分から来るかもしれない場合にはは、オブジェクト()は、パラメータ

を取らないので、私が働いているクラスがあり、私はそれのすべてを掲示します。 TypeError: object() takes no parametersあなた__new__方法で

、あなたがobject(rayon, periode, envergure, look)のために呼ばれるもの(clsパラメータと関連して)であるobject.__new__(cls, rayon, periode, envergure,look)を呼び出す:

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

問題は、エラーメッセージが言うまさにです。あなたがコメントで述べてきたように、あなたがここに__new__を使用する本当の理由を持っていない、とにかく

return object.__new__(cls) 

:しかしPythonの言語リファレンスからの抽出物を:

直接修正はしてその行を置き換えることです

あなたの Planeteクラスとして

new() is intended mainly to allow subclasses of immutable types (like int, str, or tuple) to customize instance creation.

不変タイプではない、とあなたはそのカスタマイズのため__init__を使用して、あなたはまったく__new__を使用しないでください。

関連する問題