Связь SwigPyObject и JSON внутри кода Python - PullRequest
1 голос
/ 21 апреля 2011

интро. У меня есть приложение C ++, я использую SWIG для запуска методов GetObjects и PutObjects, которые определены в коде Python. GetObjects метод открывает отформатированный файл JSON, берет оттуда объекты и возвращает их обратно в приложение C ++. В то время как метод PutObjects получает объекты из приложения C ++, открывает отформатированный файл JSON для записи и сохраняет их там.

Код довольно распространен и использует функции MyJSONDecode и MyJSONEncode для взаимодействия между объектами python и словарями json.

Теперь проблема. Swig преобразует класс MyObject C ++ в класс Python, называемый MyObject, расположенный в модуле abc. Я использую оператор import abc, чтобы использовать его далее в коде, подобном abc.MyObject(). abc.MyObject является SwigPyObject и не имеет словаря (__dict__ член).

Поэтому я не могу перебрать MyObject.__dict__ внутри функции MyJSONEncode, чтобы создать словарь, который должен быть возвращен функцией, и, следовательно, создать формат JSON.

Но у MyObject есть свойства, например, url или name и так далее. Как я могу перебрать свойства?

При необходимости я предоставлю вам код. Просто дай мне знать. И надеюсь, в общем, моя проблема понята.

В ожидании доброго ответа:)

1 Ответ

1 голос
/ 21 апреля 2011

Вы должны иметь возможность использовать функцию "dir", чтобы получить список атрибутов объекта.

Вот пример, который захватывает все не созданные пользователем атрибуты (называемые "свойствами"):

import inspect

class MyObject(object):
    def __init__(self):
        self.b = 1
        self.c = 'a'
    def func(self):
        pass

obj = MyObject()
# Get all the user created attributes for the object
attributes = [d for d in dir(obj)
              if not d.startswith('__')]
# Filter those to get the non functions
properties = [a for a in attributes
              if not inspect.ismethod(getattr(obj,a))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...