【问题标题】:Overload the necessary operator(s) so that instead of having to write [closed]重载必要的运算符,以便不必编写 [关闭]
【发布时间】:2020-03-28 20:26:24
【问题描述】:

使用 Python 3 从 Think like a CS 中做一些练习: 有一个任务: 重载必要的运算符,而不必编写

if t1.after(t2):...

我们可以使用更方便的

if t1 > t2: ... 

我该怎么做?没有想法。

【问题讨论】:

  • 到目前为止,您尝试了哪些方法,您在哪些方面遇到了困难?
  • 向我们展示您迄今为止的尝试。您可以使用__gt__ 运算符。
  • @rassar thx 知道了)
  • 您应该在发布问题之前真正搜索堆栈溢出问题。已经有很多关于运算符重载的答案。这里有几个问题:stackoverflow.com/questions/1552260/…

标签: python-3.x


【解决方案1】:

你需要重写你的类的t1.__gt__(t2) 方法。我建议覆盖以下所有 __gt__ __lt__ __le__ __ge__ 特殊功能。

例如

class Point:
    def __init__(self, x = 0, y = 0):
        self.x = x
        self.y = y


    def __lt__(self,other):
        self_mag = (self.x ** 2) + (self.y ** 2)
        other_mag = (other.x ** 2) + (other.y ** 2)
        return self_mag < other_mag

将允许您编写 p1 &lt; p2 之类的表达式,但不能编写 p1 &gt; p2。但它可以微不足道地完成。

编辑:事实证明,在使用 functools.@total_ordering 的基础上简单地覆盖 __eq____lt__ 即可获得所需的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多