我需要一种“大于”的反射魔法方法,但似乎没有。情况是这样的。我有一个跟踪单位的课程。这就是所谓的财产。我有神奇的方法设置来处理比较,但是当我将属性放在右侧时它不起作用。这是一个例子:
class Property():
def __init__(self, input, units):
self.value = input
self.units = units
def __gt__(self, other):
if isinstance(other, Property):
return self.value.__gt__(other.value)
else:
return self.value.__gt__(other)
def __float__(self):
return float(self.value)
if __name__=='__main__':
x = Property(1.,'kg')
y = Property(0.,'kg')
print y > x
print float(y) > x
print y > float(x)
因此,如果您运行此命令,您将看到输出为:False、True、False,因为中间的示例正在执行 float > Property,它使用内置 > 而不是我使用魔术方法定义的 >。我需要一个当属性位于右侧时将使用的魔术方法。那不是一件事吗?如果没有,我该如何编写这个以便可以比较值的任何组合和我自己的类。我不想有任何比较规则。即,我不想永远无法将浮点数与属性进行比较。
您可以使用functools.total_ordering装饰器为您创建缺少的比较方法:
import functools
@functools.total_ordering
class Property():
...
然后你就会得到假,假,假。不过,请务必阅读其文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)