尽管标题可以解释为三个问题,但实际问题很容易描述。在Linux系统上,我安装了python 2.7.3,并希望收到有关python 3不兼容的警告。因此,我的代码段(tester.py)看起来像:

#!/usr/bin/python -3

class MyClass(object):
    def __eq__(self, other):
        return False

当我执行此代码片段(只是为了显示问题,而不是我在项目中使用的实际代码)时,
./tester.py

我收到以下弃用警告:
./tester.py:3: DeprecationWarning: Overriding __eq__ blocks inheritance of __hash__ in 3.x
  class MyClass(object):

我的问题:如何更改此代码段以摆脱警告,即使其与版本3兼容?我想以正确的方式实现相等运算符,而不仅仅是抑制警告或类似操作。

最佳答案

在适用于Python 3.4的documentation页面中:



基本上,您需要定义一个__hash()__函数。

问题是对于用户定义的类,__eq()____hash()__函数是自动定义的。



如果仅定义__eq()__,则__hash()__设置为返回None。因此,您将碰壁。

如果您不想为实现__hash()__而烦恼,并且确定可以永远不会对对象进行哈希处理,则可以使用更简单的方法,您只需显式声明__hash__ = None即可处理警告。

关于python - 如何消除等于运算符的python3弃用警告?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15471333/

10-14 18:29
查看更多