python - 具有 __name__ 属性的 Pickle Mock/MagicMock 对象
问题描述
Mock/MagicMock 没有默认__name__
属性,我是手动添加的。
运行以下代码片段时:
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__'
如何指示 pickle 序列化__name__
属性?
解决方案
您的问题不在于pickle
,您的MagicMock
类具有__getattr__
魔术方法的自定义实现,这会在某些情况下引发AttributeError
异常。为了证明这一点,下面的代码:
import pickle
class A():
a = 10
a = A()
a.__name__ = "A"
ap = pickle.dumps(a)
na = pickle.loads(ap)
print(na.__name__)
将输出:
'A'
所以__name__
腌制和解封没有问题。
推荐阅读
- react-native - 反应本机异步存储mac OS pod安装失败
- python-3.x - 我正在尝试调用 cloudflare api“创建列表项”,但出现错误“需要类似字节的对象,而不是 'str'”。我如何解决它
- python - 如何在python中加速8位组合数字
- java - 如何为 OOP Java 中的 main 方法编写代码?
- r - `as.POSIXct` 使用 `"%Y-%m-%d %H:%M:%S"` 格式获取错误
- html - 弹出按钮中的 HTML 链接
- html - 根据注册的颜色显示表结构
- bash - 具有快速压缩的有效 ORC 文件的最小大小应该是多少
- c++ - 如何在没有内置 UDP 方法的情况下使用 UDP 流式传输 FFmpeg h.264 编码输出
- javascript - Discord bot 在用户响应后无意中发送垃圾邮件