Destruya el método del objeto después de la primera invocación

Ya he descubierto la respuesta a eso, así que la estoy colocando aquí como una pregunta para mí mismo, por el bien de aquellos que puedan tener una pregunta similar.

Básicamente, quería poder eliminar un método de objeto. ¿La razón?

Tengo una acción que debe ejecutarse una vez por vida de objeto. Esta acción no se puede colocar en el__en eso__ método ya que necesito un sistema completamente inicializado antes de que se realice.

Tengo un marcador de posición adecuado para esa acción, un método existente en la clase principal. Pero me gustaría poder evitar comprobar la condición cada vez que Framework llama al método.

Así que probé este enfoque:

In [193]: class Parent(object):
        def place_for_action(self):
           print 'This is parent'
       .....:        

In [194]: class Child(Parent):
    def place_for_action(self):
        super(Child, self).place_for_action()
        print 'This is child'
        delattr(self, 'place_for_action')
   .....:         ,

Cuando lo intenté, fallé

In [186]: c= Child()

In [187]: c.place_for_action()
This is child
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/homes/markg/<ipython-input-187-da53ac96ffa9> in <module>()
----> 1 c.place_for_action()

/homes/markg/<ipython-input-185-7037db53bd87> in do_once(self)
      2     def place_for_action(self):
      3         print 'This is child'
----> 4         delattr(self, 'place_for_action')
      5 

AttributeError: 'Child' object attribute 'place_for_action' is read-only

Respuestas a la pregunta(1)

Su respuesta a la pregunta