【发布时间】:2018-02-21 12:15:05
【问题描述】:
我在this project of mine 中有一个自定义对象,名为 Page。页面的识别功能是其title。页面通常通过调用Wiki.page、Wiki.category 或Wiki.template 或通过其他方法(如Wiki.random)生成它们来创建。 (我建议你在继续之前先看看那是什么。)
有时,此模块的用户可能希望生成一些页面并将该生成器转换为普通的list。在他们获得页面列表后,他们可能想要检查他们获得的另一个页面是否在该列表中在中。但是,这个:
>>> wp = mw_api_client.Wiki('https://en.wikipedia.org/w/api.php')
>>> wp.page('title') in [wp.page('title'),
wp.page('not this'),
wp.page('not this either')]
False
应该是 True,而不是 False,因为 是一个带有 title“标题”的页面。有没有一种神奇的方法可以让我做到这一点?我已经尝试过使用__eq__(用于相等)和__hash__(用于哈希检查)(commit),但似乎都没有成功。列表是否仅使用身份?还是我还缺少其他东西?我该如何正确地做到这一点?
【问题讨论】:
-
您的
__eq__可能已损坏。如果你有它应该可以工作。 -
__eq__确实可以解决问题。您是否尝试过调试它,例如在返回之前打印两个页面对象的 url 和比较的结果?可能对象没有按照您的预期进行初始化,或者其他原因。