Articles of metaprogramming

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

¿Por qué eval () de Python rechaza esta cadena multilínea y cómo puedo solucionarlo?

Estoy intentando evaluar la siguiente cadena con sangría de tabulación: ”’for index in range(10): os.system(“echo ” + str(index) + “”) ”’ Me sale, “Hubo un error: syntax no válida, línea 1” ¿De qué se queja? ¿Debo hacer sangría para coincidir con la sentencia eval (), o escribirla en un archivo de cadena o archivo temporal […]

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