检查对象是否在架子上

Check if an object is in a 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

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

在您的 foo class 上定义 __eq__,它将起作用。显然,您需要弄清楚相同 class 的两个实例之间的相等性意味着什么,它没有属性...

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

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

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