我正在更新包含ctypes.c_char
和ctypes.c_char
数组字段的ctype结构,现在使用派生类型。为了使用户更容易,我想使包含这些c_char
字段的ctype结构与其他ctype数组一样。例如,当访问ctypes.c_ubyte * 5
数组时,用户仍然可以访问ctype数组,但是当访问ctypes.c_char * 5
数组时,您只能获得Python字符串。
以下是我的一些示例结构:
import ctypes
class chr(ctypes.c_char):
pass
class str(ctypes.Array):
_type_ = chr
_length_ = 5
class old_struct(ctypes.Structure):
_fields_ = [('str', ctypes.c_char * 5), ('char', ctypes.c_char)]
class new_struct(ctypes.Structure):
_fields_ = [('str', str), ('char', chr)]
访问这些字段时,我得到:
old = old_struct()
print old.str # ''
print old.char # '\x00'
new = new_struct()
print new.str # ''
print new.char # <chr object at ...>
print new.char.value # '\x00'
我将如何使new.str
行为像现在一样,但也包含value
数据库,当访问时返回包含的Python字符串。如果用户访问new.str
而未指定value
(即new.str.value
),我还希望显示弃用警告。
我还希望new.char
像old.char
一样用于向后兼容,但也保留其当前功能。如果用户在未指定new.char
(即value
)的情况下访问new.char.value
,我希望显示弃用警告。