【发布时间】:2020-06-30 16:47:45
【问题描述】:
我有一个类Quantity,我想实现__lt__ 运算符来重载。我已经实现了如下所示的方法。
def __lt__(self, other):
if isinstance(other, Quantity):
return other.value < self.value
if isinstance(other, numbers.Real):
return self.value < other
raise NotImplemented
当我将它导入 python 控制台并尝试执行它时
>>> Quantity(1.2) > 1
我收到以下错误
AttributeError: 'int' object has no attribute 'number'
如果我尝试像这样执行它
>>> Quantity(1.2) < 1
我收到以下错误
TypeError: '<' not supported between instances of 'Quantity' and 'int'
有谁知道如何实现重载以使用< 和>?
更新
这是完整的课程
class Quantity:
def __init__(self, value):
self.value = float(value)
def __float__(self):
return self.value
def __repr__(self):
return 'Quantity({})'.format(self.value)
def __str__(self):
return str(self.value)
def __lt__(self, other):
if isinstance(other, Quantity):
return other.value < self.value
if isinstance(other, numbers.Real):
return self.value > other
raise NotImplemented
@property
def value(self):
return self._value
@value.setter
def value(self, value):
value = round(value, 10)
self._value = int(value * 1000) / 1000.0
【问题讨论】:
-
什么是
Quantity?numbers是什么?此外,如果self.value大于 大于other.value,您的第一个if语句将返回True -
对我来说第一个引发异常,第二个有效,请再次检查
-
@C.Nivs 我更新了帖子,以便显示整个班级。
标签: python operator-overloading