micropython - 创建新数据类型 - 属性类型

时间:2018-02-27 15:11:02

标签: python cpython micropython

我正在创建一种新的数据类型。

我正在创建的Python本机类​​型是:can_message并且它只有两个成员(现在),我希望它们的行为类似于结构中的元素。

msg_idint msg_datalist

但是,在can_message类型的这两个条目的表中,我不知道这两个qstr应该映射到哪两个:

  

我很确定两个条目的映射都是错误的:   当前条目表示msg_idint类型的别名   msg_datalist

类型的别名
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的内容是什么?

0 个答案:

没有答案