我想知道是否有一种干净的方法来检查搁架是否包含一个物体。正如您将在示例中看到的那样,我们不能像使用字典(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
如果没有任何简单的解决方案,我显然只能使用货架的副本,并在我的脚本末尾用我的副本替换货架。
答案 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 object和What is the difference between old style and new style classes in Python?。