2010-03-14 11 views

Respuesta

2

Me encantaría escuchar los comentarios de la gente sobre esto, pero creo que esto es un ejemplo de lo que quiere hacer

class FactoryMetaclassObject(type): 
    def __init__(cls, name, bases, attrs): 
     """__init__ will happen when the metaclass is constructed: 
     the class object itself (not the instance of the class)""" 
     pass 

    def __call__(*args, **kw): 
     """ 
     __call__ will happen when an instance of the class (NOT metaclass) 
     is instantiated. For example, We can add instance methods here and they will 
     be added to the instance of our class and NOT as a class method 
     (aka: a method applied to our instance of object). 

     Or, if this metaclass is used as a factory, we can return a whole different 
     classes' instance 

     """ 
     return "hello world!" 

class FactorWorker(object): 
    __metaclass__ = FactoryMetaclassObject 

f = FactorWorker() 
print f.__class__ 

El resultado que verá es: escriba 'str'

+0

¿Puedes agregar un poco de "factorización" al ejemplo, es decir, alguna personalización aplicada a los objetos creados? – olamundo

0

No es necesario. Puede override a class's __new__() method para devolver un tipo de objeto completamente diferente.

+0

No creo que pueda con metaclases ... (tal vez pueda - si es así, hágamelo saber y sabré algo :)) – RyanWilcox

2

Puede encontrar algunos ejemplos útiles en wikibooks/python, here y here

+1

esos son exactamente los enlaces con los que tropecé No pude encontrar un ejemplo concreto de una fábrica (aunque todos lo mencionen) en ninguna de ellas ... – olamundo