¿Cómo puedo ampliar la clase de imagen?

Quiero extender la clase “Imagen” en PIL.

#module Image def open(file): ... class Image: def method1:... def method2:... #module myOriginal from Image import Image class ExtendedImage(Image): def method3:... #module test import myOriginal im = myOriginal.open("picture.jpg") 

RESULTADO: Error.myOriginal no tiene ningún atributo “abierto”.

¿Cómo puedo extender la clase de imagen sin reescribir el método open ()?

Según Fredrik Lundh , el autor de PIL:

La clase de imagen no está diseñada para ser subclasificada por el código de la aplicación. Si desea un comportamiento personalizado, utilice un contenedor delegante.

miOriginal.py

Para delegar métodos individuales:

 class ExtendedImage(object): def __init__(self,img): self._img=img def method1(self): return self._img.method1() #<-- ExtendedImage delegates to self._img def method3(self): ... 

O para delegar (casi) todo a self._img , puedes usar __getattr__ :

 class ExtendedImage(object): def __init__(self,img): self._img=img def __getattr__(self,key): if key == '_img': # http://nedbatchelder.com/blog/201010/surprising_getattr_recursion.html raise AttributeError() return getattr(self._img,key) def method3(self): print('Hiya!') 

test.py:

 import Image import myOriginal im = myOriginal.ExtendedImage(Image.open("picture.jpg")) im.method3()