检查物体是否在搁架中

时间:2016-01-26 00:32:06

标签: python shelve

我想知道是否有一种干净的方法来检查搁架是否包含一个物体。正如您将在示例中看到的那样,我们不能像使用字典(myObj in list(myDictionary.values()))那样做。如果我搜索内置对象(strint ...),那么该写作将有效,但如果我搜索其他内容,则无法工作。

import shelve

class foo():
    def __init__(self):
        pass

obj = foo()

test = shelve.open('test')

test["elmt1"] = 1
test['elmt2'] = obj

test.update()

print(1 in list(test.values())) # Result is True
print(obj in list(test.values())) # Result is False

如果没有任何简单的解决方案,我显然只能使用货架的副本,并在我的脚本末尾用我的副本替换货架。

1 个答案:

答案 0 :(得分:3)

__eq__课程中定义foo,它会起作用。显然,你需要弄清楚同一个类的两个实例之间的相等意义,它没有属性......

E.g。在这种情况下,所有Foo实例都比较相等,因此上面的代码将在两种情况下都打印为True。

class Foo(object):
    def __init__(self):
        pass
    def __eq__(self, other):
        return isinstance(other, Foo)

此外,作为良好做法,您的所有课程都应继承object - 有关详细信息,请参阅Python class inherits objectWhat is the difference between old style and new style classes in Python?