如何禁用酸洗?

How to disable pickling?

我有一个 class 一些用户可能会尝试腌制它。

如果他们这样做,我想做的是:

  1. 调用对象实例中所有子项的析构方法
  2. 提出 NotImplemented 错误

但是,我不确定我需要定义什么覆盖,以便每当 pickle 尝试序列化此对象实例时,我都可以执行这两个任务。

I.E.,在伪代码中,是否有一些模拟:

def __pickle__(self):
  ...

# i.e.
def __<the function pickle looks for when it pickles>__(self):
  del x 
  del y
  del z
  ...
  raise NotImplemented("You Fool! Ahhh!!!")

您可以使用__getstate__方法。这将在您的对象被腌制时调用,您可以在此处执行您需要的操作。

def __getstate__(self):
    raise NotImplementedError("You Fool! Ahhh!!!")

文档:https://docs.python.org/3/library/pickle.html#handling-stateful-objects