加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用重载的比较运算符从int派生类访问原始int比较

发布时间:2020-12-16 22:46:39 所属栏目:Python 来源:网络整理
导读:我有一个带有重载比较运算符的int派生类. 在重载方法的主体中,我需要使用原始运算符. 玩具示例: class Derived(int):... def __eq__(self,other):... return super(Derived,self).__eq__(other) 使用Python 3.3可以正常工作,但是使用Python 2.7时会出现异常

我有一个带有重载比较运算符的int派生类.

在重载方法的主体中,我需要使用原始运算符.

玩具示例:

>>> class Derived(int):
...     def __eq__(self,other):
...         return super(Derived,self).__eq__(other)

使用Python 3.3可以正常工作,但是使用Python 2.7时会出现异常,因为AttributeError:’super’对象没有属性’__eq__’.

我可以考虑几个walkarrounds,我觉得不是很干净:

return int(self) == other

需要创建一个新的int对象,只是为了比较它

try:
    return super(Derived,self).__eq__(other)
except AttributeError:
    return super(Derived,self).__cmp__(other) == 0

基于Python版本拆分控制流,我觉得非常混乱(因此明确地检查Python版本).

如何使用Python 2.7和3.3以优雅的方式访问原始整数比较?

最佳答案
我相信你应该在定义类之前在int中定义__eq__.例如:

int = 5
def int.__eq__(self,other):
    return self.real == other
IntDerived = Derived(int)

这应该为超类赋予__eq__属性.

EDITED

主要想法奏效了,但我注意到代码无效.所以:改进代码:

class Derived(int):
    def __eq__(self,other):
        return self.real == other

Int = 5
D = Derived(Int)
D.__eq__(4) #Output: False
D.__eq__(5) #Output: True

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读