Я читал о мариновании в контексте сохраняющихся экземпляров и наткнулся на этот фрагмент:
Файлы маринования могут быть взломаны. Если вы получаете сырой файл рассола по сети, не доверяйте ему! В нем может быть вредоносный код, который будет запускаться произвольно python, когда вы попытаетесь отменить его. [1]
Насколько я понимаю, выборка превращает структуру данных в массив байтов, а библиотека выборки также содержит методы для извлечения массива байтов и перестройки python экземпляр из него.
Я проверил некоторый код, чтобы посмотреть, будет ли его запускать простое помещение кода в класс или метод init:
import pickle
class A:
print('class')
def __init__(self):
print('instance')
a = A()
print('pickling...')
with open('/home/usrname/Desktop/pfile', 'wb') as pfile:
pickle.dump(a, pfile, pickle.HIGHEST_PROTOCOL)
print('de-pickling...')
with open('/home/usrname/Desktop/pfile', 'rb') as pfile:
a2 = pickle.load(pfile)
Однако это только дает
class
instance
pickling...
de-pickling...
Предполагается, что метод __ init__ на самом деле не запускается, когда экземпляр не выбран. Поэтому я до сих пор не понимаю, как заставить код работать во время этого процесса.