这是我的课,我需要泡菜:
class sdict(dict):
def __getattr__(self, attr):
return self.get(attr, None)
__setattr__= dict.__setitem__
__delattr__= dict.__delitem__
__reduce__ = dict.__reduce__
在我看来,__reduce__
应该负责酸洗,但是:
我应该也定义__getstate__
?我完全不知道这些可以用于自定义酸洗的多种方法:__getinitargs__
,__getstate__
,__reduce__
,等等。。。在
谷歌只提到了我觉得不太清楚的官方pickle文档。有人能帮我澄清一下吗?或者给我介绍一个好的泡菜教程吗?在
我怀疑你是否走上了一条好路。在
但是,要解决泡菜问题:
Pickle试图从对象获取状态,dict没有实现它。您的
__getattr__
正在用"__getstate__"
调用以找到该魔术方法,并返回None,而不是按应该的方式提高AttributeError
。如果修复了__getattr__
,pickle将正常工作。在事实上,为什么要为丢失的属性返回None?这真的是你想要你的对象做的吗?在
这是一个很难伪造内置软件的例子。隐藏着一些微妙的事情,你必须参与其中。在
注:安identical question。在
相关问题 更多 >
编程相关推荐