Después de leer el excelente SO post, probé la elaboración de una metaclase nivel de módulo:Python metaclase y la base objeto de clase
def metaclass(future_class_name, future_class_parents, future_class_attrs):
print "module.__metaclass__"
future_class_attrs["bar"]="bar"
return type(future_class_name, future_class_parents, future_class_attrs)
__metaclass__=metaclass
class Foo(object):
def __init__(self):
print 'Foo.__init__'
f=Foo()
esto no funciona (es decir "módulo metaclase" no se imprimen) a menos que elimine la clase base object
de Foo. ¿Cómo?
NOTA: Estoy usando Python 2.6.1.
La especificación no dice tal cosa. Lo que sí dice es que si hay una clase base, se usará la metaclase de la clase base, independientemente de si la clase base especifica o no una metaclase. – Marcin