__new__ no llama __init__ cuando la clase es correcta

Tengo una clase de Vertex()

Con los siguientes métodos:

 def __new__(cls, pos_x, pos_y, size_x, size_y, text): instance = super(Vertex, cls).__new__(cls) #print 'variables {0}, {1}, {2}, {3}, {4}'.format(pos_x, pos_y, size_x, size_y, text) #print instance.__class__.__name__ return instance def __init__(self, pos_x=None, pos_y=None, size_x=None, size_y=None, text=None): print 'init' super(Vertex, self).__init__() 

En el método de otra clase tengo la llamada:

 self.vertices[touch.uid] = Vertex(pos_x=self.bounds[3][0], pos_y=self.bounds[2][1], size_x=self.bounds[1][0] - self.bounds[3][0], size_y= self.bounds[0][1] - self.bounds[2][1], text=None) 

que se comporta como se espera y crea el Vertex() llamando a __new__() y __init__()

Sin embargo, cuando descomprimo un Vertex() , se llama al método __new__() pero no al __init__() . Lo verifiqué, y al descomprimir la clase de la instancia es Vertex , por lo que sé __init__() debería llamarse.

Desprenderse deliberadamente no llama a __init__ al reinstalar un objeto. Crea un nuevo objeto ‘vacío’ (con __new__ ) y luego le vuelve a aplicar el estado.

Puede personalizar este proceso implementando __getinitargs__ (para decirle a Pickle que llame a __init__ todos modos , con los argumentos dados) o para enganchar a __setstate__ :

 def __setstate__(self, state): self.__dict__.update(state) # do other things that need to be set on unpickling.