【问题标题】:Overloading the __ge__ and __gt__ operators重载 __ge__ 和 __gt__ 运算符
【发布时间】:2016-05-15 03:09:04
【问题描述】:
class Book:
    title = ''
    pages = 0

    def __init__(self, title='', pages=0):
        self.title = title
        self.pages = pages

    def __str__(self):
        return self.title

    def __gt__(self, other):
        return self.pages > other

    def __ge__(self, other):
        return self.pages >= other

据此:http://blog.teamtreehouse.com/operator-overloading-python#comment-220271

我们必须明确地说:

 return self.pages >= other.pages

适用于 >= 或 。 有人可以解释为什么吗?

【问题讨论】:

  • 如果您在标题为“比较文学”的部分,提供了重载==!=<> 的代码。该代码明确使用您声明的形式,所以我不确定您指的是什么。
  • 是的,我在那个部分。大于/等于和小于/等于要求我输入“other.pages”,而大于和小于只需要“其他”。我想知道这是为什么。
  • 我用一个简单的例子试过这个。 A书100页,B书200页。这与“other.pages”没有明确的比较。 (A>B) 为假。 (A>=B)、(A

标签: python python-2.7 operator-overloading


【解决方案1】:

这是糟糕的设计。您应该始终明确地写出比较运算符在做什么。

实际发生的事情是这样的:

  1. 你写book_1 < book_2
  2. Python 将其转换为 book_1.__lt__(book_2)
  3. 返回book_1.pages < book_2
  4. Python 然后反转比较并执行book_2.__gt__(book_1.pages)
  5. 这会返回book_2.pages > book_1.pages,这终于意味着什么。

当读者不必为了单行比较而在精神上解开如此复杂的东西时,代码更容易理解。请不要写这样的代码。

(我不清楚为什么 __le____ge__ 会失败,但这没关系,因为无论如何你都不应该编写这样的代码。)

【讨论】:

  • 认为他们对__le____ge__的行为不同是错误的。
  • 我用一个简单的例子试过这个。 A书100页,B书200页。这与“other.pages”没有明确的比较。 (A>B) 为假。 (A>=B)、(A
猜你喜欢
  • 1970-01-01
  • 2016-02-19
  • 2012-11-26
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多