Ctypes结构自动完成

时间:2017-03-03 10:44:51

标签: python ctypes

Python IDE(任何)Intellisense如何在设计时发现结构成员?

    class MY_STRUCTURE(ctypes.Structure):
        _fields_ = [("member1", c_int),
                    ("member2", c_int)]

         #Any idea declare the fields like self.member1 here inside the structure?

    my_structure = MY_STRUCTURE()
    my_structure.member1 = 0

这是运行时的O.K,但是在输入“my_structure”时,intellisense有任何方法可以检测到my_structure中有一个member1。 ?

为此,我创建了一个python包装类,它由相同的成员名组成,并在需要时均衡/绑定它们。但是我觉得这是一种肮脏的方式。

我将分发一个python SDK,如果ctypes结构被编译为字节码(没有源代码),那么如果没有提供额外的文档,那么用户不会知道结构的成员是什么。这将使开发人员和用户工作更加复杂。

1 个答案:

答案 0 :(得分:0)

我从@Alfe响应中了解到这取决于IDE。 Python IDLE在设计时找到结构的成员。 PyCharm不能。

我按照以下方式使用我的结构,看起来工作正常。通过这种方式,ctypes.structure也可以使用python类功能进行扩展。

import ctypes
from ctypes import *

    class MY_STRUCTURE(ctypes.Structure):
        def __init__(self):
            self.member1 = 1
            self.member2 = 2
            super().__init__(member1=self.member1,
                         member2=self.member2)

        _fields_ = [("member1", c_int),
                    ("member2", c_int)]

这里的关键是调用super()基类。