我正在创建一种新的数据类型。
我正在创建的Python本机类型是:can_message
并且它只有两个成员(现在),我希望它们的行为类似于结构中的元素。
msg_id
是int
msg_data
是list
但是,在can_message
类型的这两个条目的表中,我不知道这两个qstr
应该映射到哪两个:
我很确定两个条目的映射都是错误的: 当前条目表示
类型的别名msg_id
是int
类型的别名msg_data
是list
STATIC const mp_rom_map_elem_t can_message_type_locals_dict_table[] =
{
{MP_ROM_QSTR(MP_QSTR_msg_id), MP_ROM_PTR(&mp_type_int)},
{MP_ROM_QSTR(MP_QSTR_msg_data), MP_ROM_PTR(&mp_type_list)},
};
STATIC MP_DEFINE_CONST_DICT(can_message_type_locals_dict, can_message_type_locals_dict_table);
const mp_obj_type_t can_message_type =
{
{&mp_type_type},
.name = MP_QSTR_message,
.print = can_message_obj_print,
.make_new = can_message_make_new,
.locals_dict = (mp_obj_t)&can_message_type_locals_dict,
.attr = can_message_attr
};
Python:
dir(can_message)
# list('msg_id', 'msg_data')
msg = can_message()
dir(msg)
# list('msg_id', 'msg_data')
dir()
的工作方式 - 是的,我已经通过C代码进行了追踪 - 在这两种情况下,它都使用相同的can_message_type_locals_dict_table
我希望用户能够执行以下操作。
msg = can_message()
msg.msg_id = 55
msg.msg_data = [1, 54, 25, 3, 5,3, 2, 2]
我遍历了代码并调用了mp_store_attr
,然后调用了我应该编写的函数(我做了),确保您不能添加新属性,即msg.asdfsaf = 99
。
问题
在can_message_type_locals_dict_table
中,当它代表的基础对象是可以分配的数据项时,我将映射每个qstr
的内容是什么?