2010-09-01 5 views
1

EDITpython: valeur de retour de __new__

En fait, j'appelé object.__new__(cls), et je ne savais pas que par ce que je construit un objet de classe cls! Merci de m'avoir signalé cela.

QUESTION ORIGINAL

La documentation dit

Si nouveau() ne retourne pas instance de cls, la nouvelle méthode init() de exemple ne sera pas être invoqué.

Cependant, quand je reviens object.__new__() de cls.__new__(), le __init__() est toujours invoquée. Je ne considérerais pas une instance d'objet comme une instance de cls. Qu'est-ce que je rate?

+0

Je ne pense pas que je peux le supprimer si .. Au moins pas après que j'ai upvoted la réponse .. – max

Répondre

3

Ne peut pas reproduire votre observation:

>>> class cls(object): 
... def __new__(cls): 
...  return object.__new__(object) 
... def __init__(self): 
...  print 'in __init__' 
... 
>>> x = cls() 
>>> 

Comme vous le voyez, cls.__init__ n'exécute pas.

Comment sont qui vous appelle object.__new__ (et, d'ailleurs, pourquoi êtes-vous -?).

+0

Désolé, mon erreur :(Vous avez raison .. Quelle est la bonne chose à faire? Devrais-je supprimer la question ? – max

+0

J'utilise __new__ pour implémenter énumérateur (voir cette question à moi: http://stackoverflow.com/questions/3588996/python-enumeration-class-for-orm-purposes) – max

+0

@max, juste clarifier que vous ' en appelant 'object .__ new __ (cls)' en éditant votre question - ** cet argument 'cls' fait une instance' cls', c'est pourquoi 'cls .__ init__' est alors appelé, comme il le doit. –