2010-12-04 17 views
0
class speciallist(list): 

    def __new__(self): 
     return self 

    def custommethod(self,param): 
     #do stuff 
     return value 

listesp = speciallist() 
listesp.custommethod(param) 

je reçois « méthode non liée custommethod() doit être appelée par exemple speciallist comme premier argument »héritant de la liste

Je pensais qu'il allait appeler la méthode de la classe, pourquoi fait-elle cette ?

+1

essayez sans le '__new__' –

Répondre

5

C'est sournois. Réponse courte, retirez la méthode __new__ de votre définition.

__new__ method est une méthode de classe, donc il prend la classe, pas l'instance, comme premier argument. Il est conçu pour créer une instance (éventuellement d'une autre classe) et la renvoyer. Vous renvoyez simplement la classe elle-même, pas une instance de celle-ci. Python vous permet d'appeler custommethod à partir de là, mais il n'est pas lié à une instance, donc il n'obtient pas automatiquement le self inséré comme premier argument.

Pour configurer une instance, utilisez la méthode __init__ (qui prend self comme premier argument, mais ne renvoie rien).