您的代码有几个较小的“附带”问题:测试中使用的类名中突然出现“ Transport”(不是您要定义的类名),将内置标识符践踏file
为本地时令人怀疑变量(不要那样做- 在这里并没有什么坏处,但是践踏内置标识符的习惯有一天会引起神秘的错误),这种错误Mock
已经被注意到,默认使用最慢的速度,最脏的腌制协议和文本,而不是腌制文件的二进制文件。
但是,正如@coonj所说,最根本的是缺乏状态控制。一个“普通”类不需要它(因为self.__dict__
在缺少状态控制且没有其他特性的类中,默认情况下它会被腌制和去腌制),但是因为您要重写__getattr__
,所以这不适用于您的类。您只需要另外两种非常简单的方法:
def __getstate__(self): return self.__dict__
def __setstate__(self, d): self.__dict__.update(d)
它基本上告诉pickle
您将类self.__dict__
视为普通类,尽管存在,但仍代表整个实例状态__getattr__
。