Besoin d'aide compréhension « TypeError: __new__ défaut ne prend aucun paramètre » erreur en python

StackOverflow https://stackoverflow.com/questions/2429899

  •  19-09-2019
  •  | 
  •  

Question

Pour une raison que je ne parviens pas à obtenir ma tête autour __init__ et __new__. J'ai un tas de code qui fonctionne très bien à partir du terminal, mais quand je charge comme un plugin pour Google Quick Search Box, je reçois le TypeError: default __new__ takes no parameters d'erreur.

Je suis en train de lire sur l'erreur, et il est un peu fait basculer mon cerveau. En l'état actuel, j'ai 3 classes, sans sous-classes, chaque classe a ses propres defs. Je ne l'utilise def __init__ ou def __new__, mais j'ai eu la nette impression que ce sont les fonctions (ou l'absence) qui serait de me donner l'erreur.

Je ne sais pas comment résumer le code jusqu'à un extrait qui serait utile ici, car je suis un peu au-dessus de ma tête, mais peut être trouvé à github . Pas attendre quelqu'un à BugFix mon code pour moi, je suis juste à la fin de mon esprit à ce sujet. Un simple (clair, pas la citation de la documentation python que j'ai lu 20 fois et ne comprennent toujours pas vraiment) explination pourquoi cette erreur serait pop-up, ou pourquoi je devrais être, ou ne pas être, en utilisant le __init__ et / ou fonctions de __new__ seraient sérieusement appréciés.

Était-ce utile?

La solution

Simplest façon de reproduire votre problème:

>>> class Bah(object): pass
... 
>>> x = Bah(23)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: default __new__ takes no parameters

Alors, on dirait qu'il ya une classe dans votre code (non lorsqu'il est exécuté à partir du terminal, mais vous faites des importations très différentes alors) qui n'a pas __init__ défini, et vous appelez quelque part la classe avec certains paramètres. Dans le retraçage d'erreur, vous devez obtenir l'emplacement où l'appel arrive (sinon, par exemple en raison de subtilités GUI, vous pouvez utiliser un try / except autour de tout et assurez-vous videz le retraçage à un fichier / tmp dans la clause d'exception, l'utilisation Module traceback de la bibliothèque standard).

Autres conseils

Il y a une poignée de concepts de construction de classe de base que vous semblez manquer.

La méthode __init__ est utilisée lorsque la classe est d'abord initialized, et comment vous configurez ses internes. Vous souhaitez également profiter de nouvelles classes de style (valeur par défaut dans le python 3).

Je suggère à commencer par Plongez au coeur de Python et bifurquer à partir de là.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top