2017-03-03 105 views
0

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,那麼對於用戶不會有任何想法如果沒有提供額外的文檔,結構的成員是什麼。這將使開發人員和用戶的工作更加複雜。

+1

我不確定你想知道什麼。逐字採取,答案當然是「是」,IDE有這樣一種方法來檢測結構中是否有'member1'。那是你想知道的嗎?當你鍵入my_structure時,輸入 – Alfe

+0

。 (通知'。'),成員未在自動代碼完成窗口中列出。 – freewill

+1

在我的標準cpython安裝(終端,只輸入'python'),完成工作得很好,'member1'與其他十幾個人一起提出。所以,是的,IDE也可以做到這一點。但我敢肯定,「是」不是你想知道的。請重新提出您的問題,以便我們知道您真正想要查明的內容。 – Alfe

回答

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()基類。