Python 3.x 蟒蛇3:为什么比较自然?

Python 3.x 蟒蛇3:为什么比较自然?,python-3.x,magic-methods,Python 3.x,Magic Methods,在下面的代码中,我定义了“您使用了@total\u ordering类装饰器。此装饰器显式地为您添加其他方法 从: 给定一个定义了一个或多个丰富比较排序方法的类,这个类装饰器提供其余的方法。这简化了指定所有可能的富比较操作所涉及的工作: 类必须定义\uu lt\uuuuuuuuu()、\uuuuuuuu()、\uuuuu gt\uuuuuuuuuuu()或中的一个。此外,该类还应提供一个\uuuuuu eq\uuuu()方法 因此,即使您没有定义\uuuugt\uuu方法,类装饰器也已使用\ug

在下面的代码中,我定义了“您使用了
@total\u ordering
类装饰器。此装饰器显式地为您添加其他方法

从:

给定一个定义了一个或多个丰富比较排序方法的类,这个类装饰器提供其余的方法。这简化了指定所有可能的富比较操作所涉及的工作:

类必须定义
\uu lt\uuuuuuuuu()
\uuuuuuuu()
\uuuuu gt\uuuuuuuuuuu()
中的一个。此外,该类还应提供一个
\uuuuuu eq\uuuu()
方法

因此,即使您没有定义
\uuuugt\uuu
方法,类装饰器也已使用
\ugt\u
方法以及
\uuuu eq\u
为您定义了一个方法

例如,当定义
\uu lt\uu
方法时,
\uu gt\uu()
实现设置为:

def _gt_from_lt(self, other, NotImplemented=NotImplemented):
    'Return a > b.  Computed by @total_ordering from (not a < b) and (a != b).'
    op_result = self.__lt__(other)
    if op_result is NotImplemented:
        return op_result
    return not op_result and self != other
def\u gt\u from(self、other、NotImplemented=NotImplemented):
'返回a>b。通过@total_排序从(不是a
因此,如果
self
为false,
self!=使用其他
。您没有定义
\uuuu ne\uuuu
方法,但是您提供了
\uuuu eq\uuuu
\uu ne\uuuuuu
的默认值是返回
非self.\uuu eq\uuuu(其他)
;见:

默认情况下,
\uuu ne\uuu()
委托给
\uu eq\uuu()
,并反转结果,除非
未实现


对于您的测试
Currency
实例
\uuu eq\uuuu
是不需要的,
candyPrice.\uuu gt\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(bookPrice)
调用
candyPrice.\uuuu lt\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu其他

您使用了
@total\u ordering
类装饰器。此装饰器显式地为您添加其他方法

从:

给定一个定义了一个或多个丰富比较排序方法的类,这个类装饰器提供其余的方法。这简化了指定所有可能的富比较操作所涉及的工作:

类必须定义
\uu lt\uuuuuuuuu()
\uuuuuuuu()
\uuuuu gt\uuuuuuuuuuu()
中的一个。此外,该类还应提供一个
\uuuuuu eq\uuuu()
方法

因此,即使您没有定义
\uuuugt\uuu
方法,类装饰器也已使用
\ugt\u
方法以及
\uuuu eq\u
为您定义了一个方法

例如,当定义
\uu lt\uu
方法时,
\uu gt\uu()
实现设置为:

def _gt_from_lt(self, other, NotImplemented=NotImplemented):
    'Return a > b.  Computed by @total_ordering from (not a < b) and (a != b).'
    op_result = self.__lt__(other)
    if op_result is NotImplemented:
        return op_result
    return not op_result and self != other
def\u gt\u from(self、other、NotImplemented=NotImplemented):
'返回a>b。通过@total_排序从(不是a
因此,如果
self
为false,
self!=使用其他
。您没有定义
\uuuu ne\uuuu
方法,但是您提供了
\uuuu eq\uuuu
\uu ne\uuuuuu
的默认值是返回
非self.\uuu eq\uuuu(其他)
;见:

默认情况下,
\uuu ne\uuu()
委托给
\uu eq\uuu()
,并反转结果,除非
未实现


对于您的测试
Currency
实例
\uuu eq\uuuu
是不需要的,
candyPrice.\uuu gt\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(bookPrice)
调用
candyPrice.\uuuu lt\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu其他

您是否使用具有相同价格的参数测试了您的程序?@Kairat是的,我测试过。我将把它添加到我的问题中。感谢youTry在比较中放入
打印
语句,这将显示调用的内容。一般来说,没有定义。我认为(不确定)如果你定义类似于
\uurle\uuuu
的东西,它可能会发现
candy>book
book
是一样的。无论是哪种方式,如果您用
@functools.total_ordering
装饰您的类,那么它将为您定义
\uu gt\uuuu
和所有其他函数。:“这些方法没有交换参数版本(当左参数不支持该操作,但右参数支持该操作时使用),而是,”和uu gt_uuuuu()是彼此的反映“因此,如果
x.\uu gt_uuuu(y)
不受支持,它将使用
y.\uu lt_uuuuu(x)
请看,您是否使用具有相同价格的参数测试了您的程序?@Kairat是的,我这样做了。我将把它添加到我的问题中。感谢youTry在比较中放入
打印
语句,这将显示调用的内容。一般来说,没有定义。我认为(不确定)如果你定义类似于
\uurle\uuuu
的东西,它可能会发现
candy>book
book
是一样的。无论是哪种方式,如果您用
@functools.total_ordering
装饰您的类,那么它将为您定义
\uu gt\uuuu
和所有其他函数。:“这些方法没有交换参数版本(当左参数不支持该操作,但右参数支持该操作时使用),而是,”和uuu gt_uuu()是彼此的反射“因此,如果
x.\uu gt_uuuu(y)
不受支持,它将使用
y.\uu lt_uuuu(x)
请参阅
def _gt_from_lt(self, other, NotImplemented=NotImplemented):
    'Return a > b.  Computed by @total_ordering from (not a < b) and (a != b).'
    op_result = self.__lt__(other)
    if op_result is NotImplemented:
        return op_result
    return not op_result and self != other