Articles of metaprogramming

¿Cómo pasar argumentos a la metaclase de la definición de clase?

Estoy tratando de generar clases dinámicamente en Python 2.7, y me pregunto si puede pasar fácilmente argumentos a la metaclase desde el objeto de clase. He leído esta publicación, que es increíble, pero no responde la pregunta. en el momento estoy haciendo: def class_factory(args, to, meta_class): Class MyMetaClass(type): def __new__(cls, class_name, parents, attrs): attrs[‘args’] = […]

Actualizar dinámicamente la clase Meta de ModelForm

Espero actualizar dinámicamente una clase Meta en línea de ModelForm desde mi punto de vista. Aunque este código parece actualizar la lista de exclusión en la clase Meta, la salida de as_p() , as_ul() , etc. no refleja la Meta exclude actualizada. Asumo entonces que el html se genera cuando el ModelForm no se crea […]

Problemas al intentar agregar dinámicamente métodos a la clase Python (es decir, django-tables2 ‘Tabla’)

Entonces, para un proyecto de Django, realmente me gustaría poder generar y mostrar tablas ( no basadas en querysets) dinámicamente sin necesidad de conocer el contenido o el esquema de antemano. Parece que la aplicación django-tables2 proporciona una buena funcionalidad para la representación de tablas, pero requiere que declare explícitamente los nombres de las columnas […]

Establecer automáticamente el valor de un miembro enum a su nombre

He estado jugando con la biblioteca de enumeración de python y he encontrado un enigma. En los documentos, muestran un ejemplo de una enumeración de numeración automática , en la que se define algo: class Color(AutoNumber): red = () green = () … Quiero hacer una clase similar, pero el valor se establecería automáticamente a […]

Creación dinámica de clases en SQLAlchemy

Tenemos la necesidad de crear clases SQLAlchemy para acceder a múltiples fonts de datos externas que boostán en número con el tiempo. Usamos la base declarativa para nuestros modelos de ORM principales y sé que podemos especificar manualmente nuevas clases de ORM utilizando autoload = True para generar automáticamente la asignación. El problema es que […]

Creación dinámica de funciones en Python con nombres personalizados.

Disculpas si esta pregunta ya ha sido planteada y contestada. Lo que debo hacer es un concepto muy simple, pero desafortunadamente no he podido encontrar una respuesta en línea. Necesito crear funciones dinámicas en Python (Python2.7) con nombres personalizados en tiempo de ejecución. El cuerpo de cada función también debe construirse en tiempo de ejecución, […]

Creación dinámica de métodos / tiempo de ejecución (generación de código) en Python

Necesito generar código para un método en tiempo de ejecución. Es importante poder ejecutar código arbitrario y tener una cadena de documentación. Se me ocurrió una solución que combina exec y setattr , aquí hay un ejemplo ficticio: class Viking(object): def __init__(self): code = ”’ def dynamo(self, arg): “”” dynamo’s a dynamic method! “”” self.weight […]

¿Cómo se implementa super () en Python 3?

Me pregunto cómo se implementa el nuevo super en Python 3. Esta pregunta nació en mi cabeza después de que hice un pequeño ejemplo y obtuve un extraño error. Estoy usando la architecture de componentes Pyutilib (PCA) y he creado mi metaclase personalizada para impulsar la creación de otra clase: from pyutilib.component.core import implements, SingletonPlugin, […]

¿Cómo hace Pony (ORM) sus trucos?

Pony ORM hace el buen truco de convertir una expresión de generador a SQL. Ejemplo: >>> select(p for p in Person if p.name.startswith(‘Paul’)) .order_by(Person.name)[:2] SELECT “p”.”id”, “p”.”name”, “p”.”age” FROM “Person” “p” WHERE “p”.”name” LIKE “Paul%” ORDER BY “p”.”name” LIMIT 2 [Person[3], Person[1]] >>> Sé que Python tiene una introspección y metaprogtwigción maravillosas integradas, pero, ¿cómo […]

¿Cómo funciona la función que se llama dentro de la statement de clase?

Tiene este codigo >>> class Foo: … zope.interface.implements(IFoo) … … def __init__(self, x=None): … self.x = x … … def bar(self, q, r=None): … return q, r, self.x … … def __repr__(self): … return “Foo(%s)” % self.x Obviamente, la llamada de zope.interface.implements de alguna manera altera las propiedades y el comportamiento de la clase Foo […]