我正在玩ctypes一点点按摩我写入Python的一些C代码。 C代码在很大程度上依赖于结构和联合,而目前,Python中的快速解决方案是通过ctypes继承它们:
即,从这个:
struct foo {
uint32_t a;
uint32_t b;
uint16_t c;
uint16_t d;
};
对此:
from ctypes import *
class Foo(Structure):
_fields_ = [("a", c_uint),
("b", c_uint),
("c", c_ushort),
("d", c_ushort)]
除此之外,如果我将一个__repr__()
定义扔到Python类中,然后在一个实例上使用repr()
,那么我所得到的只是<class 'Foo'>
(或者是那种效果,回想一下记忆了一下)。
所以我想知道是否有办法利用repr()
并尝试在Python和C之间充分利用这两个世界,或者我是否应该查看元类并使用struct
库将字节打包/解压缩到适当的Python类中。
思想?
答案 0 :(得分:2)
我真的不明白这个问题。 这很好用:
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>
只有你这样做:
print repr(Foo)
你最终会得到
<class '__main__.Foo'>
或类似的东西。
您确定在实例上使用repr
吗?