如何在 Python 中的结构中使用 C++ 结构

How to use C++ struct in struct in Python

我必须将 C++ 代码传输到 Micro Python 到 Wipy 平台。目前,我遇到了一些问题,尤其是从其他结构访问变量时

C++ 代码:

typedef struct {
    char id[100];
    int rssi;
} tag_info;

typedef struct {
    tag_info tag[20];
} tag_list;

typedef struct {
    int timestamp;
    tag_list tags;
    int heading;
    int airt;
} data_packet;

data_packet packet;

for (i = 0; i < total_amount_of_tags - 1; i++) {
            print_function("id", packet.tags.tag[i].id, destination); 
            print_function("rssi", packet.tags.tag[i].rssi, destination);
        }

我的微Python代码:

class tag_info:
    def __init__(self):
        self.id = ""
        self.rssi = 0

class tag_list:
    def __init__(self):
        self.tag = tag_info

class data_packet():
    def __init__(self):
        self.timestamp=0
        self.tags = tag_list
        self.heading=0
        self.airt=0

packet=data_packet()

for i in range(0, total_amount_of_tags -1)
    print_function('id',packet.tags.tag[i].id,destination)
    print_function("rssi", packet.tags.tag[i].rssi, destination); 

我的代码中的问题是我无法访问标签[i] 和其他变量。在这种情况下我应该使用继承还是 namedTuple。如果我尝试使用 namedTuple from collections import namedTuple,则会出现以下错误消息:no module called collections,因此我希望尽可能避免使用该库

在以下内容中:

self.tag = tag_info
您正在将 class 分配给一个变量。 我假设你打算这样做:
self.tag = tag_info()
但如果我理解正确的话,这应该是一个 tag_info 的列表,所以你实际需要的是:
self.tag = [tag_info() for i in range(20)]

同样适用于:

self.tags = tag_list()

对于预期的行为应该是什么,这有点令人困惑。但看起来您需要创建 tag_info 的 20 个实例。您还需要使用 ().

实例化您的实例
class tag_info:
    def __init__(self):
        self.id = ""
        self.rssi = 0

class tag_list:
    def __init__(self):
        self.tag = [tag_info() for _ in range(20)]

class data_packet():
    def __init__(self):
        self.timestamp=0
        self.tags = tag_list()
        self.heading=0
        self.airt=0