Besoin d'aide compréhension « TypeError: __new__ défaut ne prend aucun paramètre » erreur en python
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 def
s. 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.
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 init
ialized, 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à.