Inicial hijo con instancia de padre

Tengo una función que devuelve instancias de la clase Parent:

def generateParent(): do_stuff return Parent(some_parameters) 

Ahora quiero iniciar una subclase de Padre con los resultados de una llamada a generateParent() :

 class Child(Parent): def __new__(): return generateParent(some_other_parameters) 

El problema es que cuando anulo algunos métodos de Parent in Child y luego los llamo en instancias de Child en mi progtwig, se llama al método original de Parent en lugar del nuevo de Child. ¿Estoy haciendo algo mal aquí? ¿Estoy usando el diseño correcto aquí para mi tarea?

EDITAR: No tengo acceso ni a Parent ni a generaParent ()

Solución (gracias a la respuesta de @Paul McGuire):

 class Child(object): def __init__(self): self.obj = generateParent() def __getattr__(self, attr): return getattr(self.obj, attr) 

Dado que generateParent no es su código, entonces en lugar de la herencia, es posible que desee utilizar la contención y la delegación. Es decir, en lugar de definir una subclase, defina una clase de envoltorio que contenga el objeto generado, reenvíe las llamadas de método cuando sea necesario, pero puede agregar un comportamiento nuevo o modificado en el envoltorio.

En esta pregunta , el OP tuvo una situación similar, generando una clase en una biblioteca, pero queriendo extender la clase y / o modificar algún comportamiento de la clase. Mira cómo agregué una clase de envoltorio en esa pregunta, y podrías considerar hacer algo similar aquí.

Aquí hay una forma de hacerlo:

 def generateChild(params): p = generateParent(params) p.__class__ = Child return p class Child(Parent): # put method overrides etc here childinstance = generateChild(some_params) 
  1. Quizás desee que generateParent pueda crear instancias de otras clases:

     def generateParent(cls=Parent): do_stuff return cls(some_parameters) 

    Ahora esto hará que un objeto Niño:

     child = generateParent(Child) 
  2. ¿O quizás quieres que Parent y todas sus clases derivadas utilicen un código de inicialización común?

     class Parent(object): def __init__(self): do_stuff # init from some_parameters class Child(Parent): # blah.. 
  3. Haga que su objeto hijo pueda copiar información de un objeto padre creado:

     class Child(Parent): def __init__(self): model_parent = generateParent() self.a = model_parent.a self.b = model_parent.b # etc.