2016-08-03 31 views
0

在Python中使用ctypes的,以下是合法的:ctypes bitfields是如何工作的?

from ctypes import * 
class POINT(Structure): 
    _fields_ = [("x", c_int), 
    ("y", c_int)] 

p = POINT(10,20) 
sum = p.x + p.y 

但是這是如何工作?我的意思是p.x如何完全合法?什麼樣的技巧提供了這個? 謝謝。

回答

2

當您初始化子類的實例Structure時,它將讀取_fields_並根據該列表中的字段名稱關聯屬性。

這是用C全部完成,所以如果你想看看它究竟是如何完成的,你需要使用來源,Struct_type的特別的定義,以及_init_pos_args功能https://github.com/python/cpython/blob/master/Modules/_ctypes/_ctypes.c#L4021

+0

謝謝詹姆斯。這清除了我的想法。 – eral