Соление определения класса

Существует ли способ засолить определение класса?

То, что я хотел бы сделать, засолить определение (который может созданный динамично), и затем отправьте его по соединению TCP так, чтобы экземпляр мог быть создан на другом конце.

Я понимаю, что могут быть зависимости, как модули и глобальные переменные, на которые полагается класс. Я хотел бы связать их в процессе соления также, но я не обеспокоен автоматическим обнаружением зависимостей, потому что это хорошо, если бремя находится на пользователе для определения их.

8
задан Giorgio 13 April 2010 в 02:39
поделиться

2 ответа

Увы, не напрямую. Вы можете отправить строковую форму оператора класса или форму байт-кода и «повторно гидратировать» ее с помощью exec на принимающей стороне.

3
ответ дан 5 December 2019 в 20:14
поделиться

В документации довольно хорошо объясняется, что можно и что нельзя мариновать, и почему.

http://docs.python.org/library/pickle.html#what-can-be-pickled-and-unpickled

В основном, если класс или модуль можно импортировать по имени, когда он будет распакован, то он должен работать, если только вы не планируете изменить определение класса между тем, как вы его распакуете. В приведенном ниже определении класса только имя класса "Test" и имя метода "mymethod" будут распакованы. Если вы выделите определение класса, а затем измените его так, что attr станет другим значением, а mymethod будет делать что-то совершенно другое, выделитель выделит новое определение.

class Test(object):
    attr = 5

    def mymethod(self, arg):
        return arg
2
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: