2

我正在玩一些 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 类中。

想法?

4

1 回答 1

2

I don't really understand the problem. This works just fine:

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>

only if you do:

print repr(Foo)

you'll end up with

<class '__main__.Foo'>

or something similar.

Are your sure you use repr on an instance?

于 2012-05-22T20:57:58.963 回答