小编ela*_*ard的帖子

腌制没有__reduce__方法的字典子类不会加载成员属性

我需要确保a dict只能接受某种类型的对象作为值。它也必须是可挑选的。这是我的第一次尝试:

import pickle

class TypedDict(dict):
    _dict_type = None

    def __init__(self, dict_type, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._dict_type = dict_type

    def __setitem__(self, key, value):
        if not isinstance(value, self._dict_type):
            raise TypeError('Wrong type')
        super().__setitem__(key, value)
Run Code Online (Sandbox Code Playgroud)

如果我使用以下代码进行测试(python 3.5)

my_dict = TypedDict(int)
my_dict['foo'] = 98

with open('out.pkl', 'wb') as fin:
    pickle.dump(my_dict, fin)

with open('out.pkl', 'rb') as fin:
    out = pickle.load(fin)
Run Code Online (Sandbox Code Playgroud)

我收到错误:TypeError: isinstance() arg 2 must be a type or tuple of types
似乎它没有为加载正确的值,_dict_type而是使用default None
另外,它似乎取决于协议,好像它与protocol=0

但是,如果我重写该__reduce__方法并仅调用super,那么一切都会神奇地起作用。 …

python inheritance dictionary pickle python-3.x

7
推荐指数
1
解决办法
416
查看次数

如何删除Neo4j中特定类型的所有关系

我是Neo4j // Cypher的新手,我正在按照教程进行操作.使用电影数据库我尝试使用以下查询删除所有"ACTED_IN"关系

match (:Person)-[r:ACTED_IN]->(:Movie)
DELETE r;
Run Code Online (Sandbox Code Playgroud)

但是我发现我仍然在节点之间有一些"ACTED_IN"关系,我必须多次重新运行上一个查询才能完全删除这些关系.

为什么它没有像我预期的那样工作?这样做的正确方法是什么?

谢谢

neo4j cypher

3
推荐指数
1
解决办法
8470
查看次数

标签 统计

cypher ×1

dictionary ×1

inheritance ×1

neo4j ×1

pickle ×1

python ×1

python-3.x ×1