Python Ctypes结构自动完成

Python Ctypes结构自动完成,python,ctypes,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?

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
这在运行时是可以的,但是intellisense在键入“my_structure”时是否有方法检测my_结构中是否有member1

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


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

我从@Alfe响应中了解到,这取决于IDE。pythonidle在设计时查找结构的成员。皮查姆不能

我用下面的方法使用我的结构,看起来工作很好。通过这种方式,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()基类。

我不确定您想知道什么。一字不差地说,答案当然是“是”,IDE有这样一种方法来检测结构内部是否存在
member1
。这就是你想知道的吗?当你输入我的结构时。(注意“”),成员未在自动代码完成窗口中列出。在我的标准cpython安装(终端,只需键入
python
)中,完成效果很好,
member1
与其他十几个成员一起提出。因此,是的,IDE也可以做到这一点。但我很确定“是”并不是你想知道的。请重新表述您的问题,以便我们知道您真正想要了解的内容。@Alfe谢谢,我只是确认在python标准IDE的“自动完成”窗口中自动完成显示结构的成员。我用的是PyCharms喷气机的大脑,但它没有显示出来。我找到了另一个解决方案,现在就发布