Python Pickle Mock/MagicMock对象,具有_name____属性
Mock/MagicMock没有默认的Python Pickle Mock/MagicMock对象,具有_name____属性,python,pickle,Python,Pickle,Mock/MagicMock没有默认的\uuuu name\uuuu属性,我手动添加了它 运行以下代码段时: import pickle from mock import MagicMock m = MagicMock() m.__name__ = 'my name' m.__reduce__ = lambda self: (MagicMock, ()) print(m.__name__) b = pickle.dumps(m) pickled_m = pickle.loads(b)
\uuuu name\uuuu
属性,我手动添加了它
运行以下代码段时:
import pickle
from mock import MagicMock
m = MagicMock()
m.__name__ = 'my name'
m.__reduce__ = lambda self: (MagicMock, ())
print(m.__name__)
b = pickle.dumps(m)
pickled_m = pickle.loads(b)
print(pickled_m.__name__)
我得到一个错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/.../.pyenv/virtualenv/lib/python3.6/site-packages/mock/mock.py", line 716, in __getattr__
raise AttributeError("Mock object has no attribute %r" % name)
AttributeError: Mock object has no attribute '__name__'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/...pyenv/virtualenv/lib/python3.6/site packages/mock/mock.py”,第716行,位于__
raise AttributeError(“模拟对象没有属性%r”%name)
AttributeError:模拟对象没有属性“\u\u name\u”
如何指示pickle序列化
\uu name\uuuuuu
属性?您的问题不在于pickle
,您的MagicMock
类有一个\uuuuu getattr\uuuuuuuuu
魔术方法的自定义实现,这会在某些情况下引发AttributeError
异常。为了证明这一点,以下代码:
import pickle
class A():
a = 10
a = A()
a.__name__ = "A"
ap = pickle.dumps(a)
na = pickle.loads(ap)
print(na.__name__)
将输出:
'A'
因此,\uuuuuu name\uuuuuuu
正在被pickle和unpickle,没有任何问题