【问题标题】:Two python objects both greater than or less than each other两个大于或小于彼此的python对象
【发布时间】:2015-02-10 03:04:13
【问题描述】:

我正在写一个分数类,在搞砸的时候我注意到了这一点:

>>> class Test:
    def __init__(self):
        pass


>>> Test()>Test()
True
>>> Test()>Test()
False

这是为什么?

【问题讨论】:

  • 你能告诉我们你的功能是什么……或者更确切地说是类的样子吗?
  • 您的 Fraction 实现会很高兴看到,或者与重载相关的部分。
  • 您的__init__ 方法呢?尝试向我们展示完整的最小代码。
  • 可能发生的情况是您要么有可比较的 mixin,要么它只是比较来自 repr 的字符串。
  • 我注意到这种简单的情况也有同样的行为:pastebin.com/EX7vpvm9。它只在 2.7 中这样工作。在 3.4 中它甚至不会编译。

标签: python oop python-2.7


【解决方案1】:

简单地说,你的比较不是直接在类的数据上,而是类本身的实例 (id(Foo(1))),因为你没有明确地写它的比较。

它比较实例的 id,因此有时为 True,有时为 False。

 Foo(1)
=> <__main__.Foo instance at 0x2a5684>
   Foo(1)
=> <__main__.Foo instance at 0x2a571c>
   Foo(1)

【讨论】:

  • 你能解释一下吗?我不明白为什么如果我运行Foo(5) &gt; Foo(2) 它会给出False,然后当我再次运行相同的测试Foo(5) &gt; Foo(2) 它会给出True?
  • 你的 a
  • 我知道但是id不一样,但是为什么每次对比都不一样呢?
  • 当你做Foo(1)时,这会实例化一个Foo类,因此它每次都可以变化。但是,如果您执行a = Foo(1),并以相同的方式使用ab 进行比较,您将始终得到相同的结果,b/c 没有任何更改,您指的是同一个变量相同的id
  • 看来你是对的,但我在 python 参考中找不到任何支持这一点的东西。我看到的最接近的是注释 大多数其他内置类型的对象比较不相等,除非它们是同一个对象;一个对象被认为比另一个对象更小还是更大的选择是在程序的一次执行中任意但始终如一地做出的。 here 但这会专门调用内置函数并且也在 python3 文档中(并且这个在 python3 中不起作用)
猜你喜欢
  • 1970-01-01
  • 2015-04-04
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多