【问题标题】:decorator __lt__ and others - why use these and how do they work?装饰器 __lt__ 和其他人 - 为什么使用这些以及它们是如何工作的?
【发布时间】:2014-09-09 09:57:17
【问题描述】:

我偶然发现了一个理解装饰器的问题。对比下面的代码,__lt__(self, number)方法和less_than(self, number)方法相比有什么用? 这两种方法之间有什么区别吗?它们如何处理参数?

 class Sort:

    def __init__(self, number):
        self.number = number

    def __lt__(self, number):
        return self.number < number

    def less_than(self, number):
        return self.number < number

【问题讨论】:

  • 这与装饰器无关。 __lt__ 是 Python 在将两个对象与 &lt; 进行比较时调用的特殊方法。
  • 这与装饰器无关(它们完全不同)。不过,问题的其余部分非常有效。

标签: python


【解决方案1】:

__lt__()less_than() 这两个函数做同样的事情。但是,有一个很大的区别: 当你使用“__lt__会被python内部调用。所以,你可以这样做

x = Sort(5)
y = Sort(10)
print(x < y)

比较x &lt; y 调用x.__lt__(y),因此它返回true。通过这种方式,您可以为您创建的特定类更改内置运算符的行为。更多详情请参阅“运算符重载”和“python 魔术方法”

【讨论】:

    【解决方案2】:

    正如 Martijn Pieters 所说,这与装饰器无关。

    s1 = Sort(1)
    s2 = Sort(2)
    
    if s1 < s2:
        print 'Yes'
    
    if s1.less_than(2):
        print 'Yes'
    

    看到区别了吗? 首先,如果您与 Sort 类型的对象进行比较。 在第二种情况下,如果您从 Sort 类型的实例 s1 调用方法。

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 2013-04-11
      • 2011-07-04
      • 2014-05-27
      • 2018-01-30
      • 2011-07-20
      • 2019-03-06
      相关资源
      最近更新 更多