我有一个带有重载比较运算符的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__.例如:
原文链接:https://www.f2er.com/python/438660.htmlint = 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