Articles of metaclass

¿Cómo crear una metaclase que pueda dar a una clase un conjunto de instancias y proporcionar una instancia de “vudú” que actúa en todas las instancias de clase?

Me pregunto cómo crear una metaclase en Python que pueda crear otras clases que: Almacena sus instancias en una matriz automáticamente Tenga una instancia especial, NonMetaClass.all , cuyas propiedades: Cuando se establece, establece todas las instancias de la clase con la misma clave en el mismo valor (por ejemplo, Foo.all.num = 3 hace que todas […]

¿Por qué el módulo namedtuple no utiliza una metaclase para crear objetos de clase nt?

Pasé un tiempo investigando las collections.namedtuple llamó módulo de doble hace unas semanas. El módulo utiliza una función de fábrica que llena los datos dynamics (el nombre de la nueva clase de namedtuple y los nombres de atributos de la clase) en una cadena muy grande. Luego, exec se ejecuta con la cadena (que representa […]

implementar singleton con metaclase

El código a continuación es cómo implemento Singleton con metaclass, y funciona bien. class Test_MetaClass(type): def __init__(cls, name, bases, dict): super(Test_MetaClass, cls).__init__(cls, bases, dict) cls._instance = None print ‘Test_MetaClass __init__’ def __call__(cls, *args, **kwargs): if cls._instance is None: cls._instance = super(Test_MetaClass, cls).__call__(*args, **kwargs) print ‘Test_MetaClass __call__’ return cls._instance class A(object): __metaclass__ = Test_MetaClass def __init__(self): […]

Cuerpo del método abstracto en Python 3.5

Tengo una clase abstracta, Model , con algunos métodos abstractos, ¿qué debo poner en el cuerpo de los métodos? Un retorno class Model(metaclass=ABCMeta): @abstractmethod def foo(self): return Un pase class Model(metaclass=ABCMeta): @abstractmethod def foo(self): pass Planteando un error descriptivo. class Model(metaclass=ABCMeta): @abstractmethod def foo(self): raise NotImplementedError(“Class {class_name} doesn’t implement {func_name} function” .format(class_name=self.__class__.__name__, func_name=self.foo.__name__)) Normalmente, implementaría […]

SqlAlchemy metaclass confusion

Estoy tratando de inyectar algo de mi propio código en el proceso de construcción de clase de SqlAlchemy. Tratando de entender el código, estoy algo confundido por la implementación de la metaclase. Aquí están los fragmentos relevantes: La “metaclase” predeterminada de SqlAlchemy: class DeclarativeMeta(type): def __init__(cls, classname, bases, dict_): if ‘_decl_class_registry’ in cls.__dict__: return type.__init__(cls, […]

IPython representación de clases.

Estaba probando IPython con un módulo que creé y no muestra la representación real de los objetos de clase. En cambio, muestra algo como TheClass.__module__ + ‘.’ + TheClass.__name__ Uso mucho las metaclases en este módulo y tengo representaciones de clase realmente significativas que deberían mostrarse al usuario. ¿Existe algún método específico de IPython que […]

Quien llama a la metaclase

Esto en realidad se deriva de una discusión aquí en SO. Version corta def meta(name, bases, class_dict) return type(name, bases, class_dict) class Klass(object): __metaclass__ = meta Se llama a meta() cuando se ejecuta la statement de clase Klass . ¿Qué parte del código (interno de Python) realmente llama meta() ? Versión larga Cuando se declara […]

¿Cómo funciona un objeto classmethod?

Me cuesta entender cómo funciona un objeto classmethod en Python, especialmente en el contexto de las metaclases y en __new__ . En mi caso especial, me gustaría obtener el nombre de un miembro de método de clase, cuando repito los members que se dieron a __new__ . Para los métodos normales, el nombre simplemente se […]

Metaclase para parametrizar la herencia.

He leído algunos tutoriales sobre metaclases de Python. Nunca he usado uno antes, pero necesito uno para algo relativamente simple y todos los tutoriales parecen estar orientados a casos de uso mucho más complejos. Básicamente, quiero crear una clase de plantilla que tenga un cuerpo preespecificado, pero toma su clase base como parámetro. Desde que […]

Anulación de la metaclase de tipo () predeterminada antes de que se ejecute Python

Aquí hay dragones. Has sido advertido. Estoy pensando en crear una nueva biblioteca que intentará ayudar a escribir un mejor conjunto de pruebas. Para hacer eso, una de las características es una característica que verifica que cualquier objeto que se esté utilizando y que no sea el corredor de prueba y el sistema bajo prueba […]