Articles of metaprogramming

¿Es el libro Pro Django todavía relevante?

Quiero profundizar más en los aspectos internos de Django y la documentación oficial en línea solo llega hasta ese punto. Las revisiones para Pro Django de Marty Alchin son fantásticas (leí Pro Python y realmente lo disfruté). Sin embargo, el libro es de 2008 y está basado en Django v1.0. Mi empresa se basa en […]

¿Metaprogtwigción estáticamente mecanografiada?

He estado pensando en lo que echaría de menos al trasladar un código Python a un lenguaje tipado estáticamente como F # o Scala; Las bibliotecas pueden ser sustituidas, la concisión es comparable, pero tengo muchos códigos Python, que son los siguientes: @specialclass class Thing(object): @specialFunc def method1(arg1, arg2): … @specialFunc def method2(arg3, arg4, arg5): […]

¿Cómo hacer que funcione super () llenando manualmente la celda __class__?

En Python 3, se puede usar super() lugar de super(MyClass, self) , pero esto solo funciona en métodos que se definieron dentro de la clase. Como se describe en el artículo de Michele Simionato, el siguiente ejemplo no funciona: def __init__(self): print(‘calling __init__’) super().__init__() class C(object): __init__ = __init__ if __name__ == ‘__main__’: c = […]

Usando claves JSON como atributos en JSON nesteds

Estoy trabajando con estructuras de datos anidadas de tipo JSON en Python 2.7 que intercambio con algún código perl extranjero. Solo quiero ‘trabajar con’ estas estructuras anidadas de listas y diccionarios de una manera más pythonica. Así que si tengo una estructura como esta … a = { ‘x’: 4, ‘y’: [2, 3, { ‘a’: […]

¿Alguien utiliza meta-meta-clases / meta-meta-meta-clases en Python / otros lenguajes?

Recientemente descubrí metaclases en python. Básicamente, una metaclase en python es una clase que crea una clase. Hay muchas razones útiles por las que querría hacer esto, por ejemplo, cualquier tipo de inicialización de clase. Registrar clases en fábricas, validación compleja de atributos, alterar cómo funciona la herencia, etc. Todo esto no solo es posible […]

Equivalente de python eval en Haskell

Hay una función en python llamada eval que toma entrada de cadena y la evalúa. >>> x = 1 >>> print eval(‘x+1′) 2 >>> print eval(’12 + 32’) 44 >>> ¿Cuál es el equivalente de Haskell de la función eval ?

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

Uso de metaclases para anular métodos de complejos integrados

Como ejercicio de aprendizaje, estoy tratando de implementar una clase que emulará el comportamiento del complex componente de Python, pero con un comportamiento diferente de los métodos __str__ y __repr__ : quiero que se impriman en el formato … (1.0,2.0) …en lugar de: (1+2j) Primero intenté simplemente subclasificar desde complex y redefiniendo __str__ y __repr__ […]

Crea un tipo de pareja con nombre personalizado con características adicionales

Me gustaría crear mi propio tipo de complemento con nombre que tenga algunas características adicionales. Digamos que creamos una clase: from collections import namedtuple MyClass = namedtuple(‘MyClass’, ‘field1 field2’) Es inmutable, legible y simple. Ahora puedo crear instancias de MyClass: myobj = MyClass(field1 = 1, field2 = 3.0) print(myobj.field1, myobj.field2) Mi requisito adicional es cuando […]

¿Puedo definir un __repr__ para una clase en lugar de una instancia?

¿Puedo definir un __repr__ para una clase en lugar de una instancia? Por ejemplo, estoy tratando de hacer esto class A(object): @classmethod def __repr__(cls): return ‘My class %s’ % cls Lo que obtengo es In [58]: a=A() In [59]: a Out[59]: My class In [60]: A Out[60]: __main__.A Estoy intentando que la salida de la […]