Ctypes结构自动完成
问题描述:
Python IDE(任何)智能感知如何在设计时发现结构成员?Ctypes结构自动完成
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内的member1打字时“my_structure。” ?
为此目的,我创建了一个由相同成员名称组成的python包装类,并在需要时均衡/绑定它们。但我觉得这是一个肮脏的方式。
如果将ctypes结构编译为字节码(无源代码),我将分发一个python SDK,那么对于用户不会有任何想法如果没有提供额外的文档,结构的成员是什么。这将使开发人员和用户的工作更加复杂。
答
我从@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()基类。
我不确定你想知道什么。逐字采取,答案当然是“是”,IDE有这样一种方法来检测结构中是否有'member1'。那是你想知道的吗?当你键入my_structure时,输入 – Alfe
。 (通知'。'),成员未在自动代码完成窗口中列出。 – freewill
在我的标准cpython安装(终端,只输入'python'),完成工作得很好,'member1'与其他十几个人一起提出。所以,是的,IDE也可以做到这一点。但我敢肯定,“是”不是你想知道的。请重新提出您的问题,以便我们知道您真正想要查明的内容。 – Alfe