Как использовать структуру C ++ в структуре в Python - PullRequest
0 голосов
/ 09 января 2019

Я должен перенести код 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);
        }

Мой код MicroPython:

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, поэтому я бы предпочел по возможности избегать этой библиотеки

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Это немного сбивает с толку относительно ожидаемого поведения. Но, похоже, вам нужно создать 20 экземпляров tag_info. Также вам нужно создать экземпляры ваших экземпляров, используя ().

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
0 голосов
/ 09 января 2019

В следующем:

self.tag = tag_info
Вы присваиваете класс переменной. Я предполагаю, что вы хотели сделать:
self.tag = tag_info()
но если я правильно понимаю, это должен быть список tag_info, так что вам действительно нужно это:
self.tag = [tag_info() for i in range(20)]

То же самое относится к:

self.tags = tag_list()
...