检查对象是否在架子上
Check if an object is in a shelve
我想知道是否有一种干净的方法来检查货架是否包含对象。正如您将在示例中看到的那样,我们不能像使用字典那样进行操作 (myObj in list(myDictionary.values())
)。如果我搜索一个内置对象(str
、int
...),该写作将有效,但如果我搜索其他对象,则该写作将无效。
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?。
我想知道是否有一种干净的方法来检查货架是否包含对象。正如您将在示例中看到的那样,我们不能像使用字典那样进行操作 (myObj in list(myDictionary.values())
)。如果我搜索一个内置对象(str
、int
...),该写作将有效,但如果我搜索其他对象,则该写作将无效。
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?。