¿Usando __repr__() en una subclase de ctypes?
Frecuentes
Visto 762 equipos
2
Estoy jugando un poco con ctypes para masajear un código C que escribí en Python. El código C se basa en gran medida en estructuras y uniones, y por ahora, la solución rápida en Python es subclasificarlas a través de ctypes:
Es decir, de esto:
struct foo {
uint32_t a;
uint32_t b;
uint16_t c;
uint16_t d;
};
A esto:
from ctypes import *
class Foo(Structure):
_fields_ = [("a", c_uint),
("b", c_uint),
("c", c_ushort),
("d", c_ushort)]
Excepto, si lanzo un __repr__()
definición en la clase Python y luego usar repr()
en una instancia, todo lo que obtengo es <class 'Foo'>
(o algo por el estilo, recordando un poco aquí).
Así que me pregunto si hay una manera de utilizar repr()
y tratar de obtener lo mejor de ambos mundos entre Python y C, o si debo mirar las metaclases y usar el struct
biblioteca para empaquetar/desempaquetar bytes en las clases de Python adecuadas.
Pensamientos
1 Respuestas
2
Realmente no entiendo el problema. Esto funciona bien:
from ctypes import *
class Foo(Structure):
_fields_ = [("a", c_uint),
("b", c_uint),
("c", c_ushort),
("d", c_ushort)]
def __repr__(self):
return "<Foo: a:%d b:%d c:%d e:%d>" % (self.a, self.b, self.c, self.d)
f = Foo(1,2,3,4)
print repr(f)
# <Foo: a:1 b:2 c:3 e:4>
solo si lo haces:
print repr(Foo)
terminarás con
<class '__main__.Foo'>
o algo similar.
¿Estás seguro de que usas repr
en una instancia?
contestado el 22 de mayo de 12 a las 21:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python ctypes or haz tu propia pregunta.
Bueno, estoy haciendo esto en Python 2.4, después de crear manualmente ctypes para él. ¿Puede ser eso parte del problema? - Kumba
De alguna manera me parece poco probable, solo
tried it
en un servidor con python2.4 y funcionó. - mataDe acuerdo, atribuya esto a PEBKAC o PICNIC. estaba haciendo
f=Foo
NOf=Foo()
. Herp derp. - Kumba