Articles of metaprogramming

¿Qué es el atributo python get y set order?

Python nos ofrece muchas posibilidades en el atributo de instancia / clase, por ejemplo: class A(object): def __init__(self): self.foo = “hello” a = A() Hay muchas formas de acceder / cambiar el valor de self.foo : acceso directo a.foo dictado interno a.__dict__[‘foo’] obtener y establecer a.__get__ y a.__set__ , por supuesto, hay dos métodos predefinidos. […]

¿Por qué no puedo pasar yo mismo como un argumento con nombre a un método de instancia en Python?

Esto funciona: >>> def bar(x, y): … print x, y … >>> bar(y=3, x=1) 1 3 Y esto funciona: >>> class Foo(object): … def bar(self, x, y): … print x, y … >>> z = Foo() >>> z.bar(y=3, x=1) 1 3 E incluso esto funciona: >>> Foo.bar(z, y=3, x=1) 1 3 Pero ¿por qué no […]

¿Por qué los cambios de Python 3 para que exec rompa este código?

Miré a través de los innumerables hilos de ‘Python exec‘ en SO, pero no pude encontrar uno que respondiera a mi problema. Lo siento mucho si esto se ha preguntado antes. Aquí está mi problema: # Python 2.6: prints ‘it is working’ # Python 3.1.2: “NameError: global name ‘a_func’ is not defined” class Testing(object): def […]

Python equivalente de Ruby ‘method_missing’

¿Cuál es el equivalente de Python del método de method_missing método de Ruby? Intenté usar __getattr__ pero este enganche se aplica también a los campos. Solo quiero interceptar las invocaciones del método. ¿Cuál es la forma Python de hacerlo?

setattr y getattr con métodos

Tengo una clase de plato de caldera que delega algunas acciones a una clase de referencia. Se parece a esto: class MyClass(): def __init__(self, someClass): self.refClass = someClass def action1(self): self.refClass.action1() def action2(self): self.refClass.action2() def action3(self): self.refClass.action3() Esta es la clase de referencia: class RefClass(): def __init__(self): self.myClass = MyClass(self) def action1(self): #Stuff to execute […]

Sqlalchemy crea dinámicamente la tabla y la clase asignada

Dado un conjunto de nombres de columna y sus tipos, el objective es para instanciar una tabla y la clase asignada correspondiente. Está relacionado con la pregunta publicada aquí: Creación dinámica de clases en SQLAlchemy . Hasta ahora tengo lo siguiente: table = Table(tbl, metadata, *(Column(col, ctype, primary_key=pk, index=idx) for col, ctype, pk, idx in […]

Dado un método, ¿cómo devuelvo la clase a la que pertenece en Python 3.3 en adelante?

Dado x = Cf después de: class C: def f(self): pass ¿A qué llamo en x que devolverá C ? Lo mejor que pude hacer es exec una parte analizada de x.__qualname__ , que es feo: exec(‘d = ‘ + “.”.join(x.__qualname__.split(‘.’)[:-1])) Para un caso de uso, imagine que quiero un decorador que agregue una super […]

¿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 […]