两个python对象都大于或小于彼此
我正在写一节分数课,在闲逛时我注意到:两个python对象都大于或小于彼此,python,oop,python-2.7,Python,Oop,Python 2.7,我正在写一节分数课,在闲逛时我注意到: >>> class Test: def __init__(self): pass >>> Test()>Test() True >>> Test()>Test() False 这是为什么?简单地说,您的比较不是直接针对类的数据,而是针对类本身的实例(id(Foo(1)),因为您没有明确地编写它的比较 它比较实例的id,因此有时为真,有时为假 Foo(1) =&
>>> class Test:
def __init__(self):
pass
>>> Test()>Test()
True
>>> Test()>Test()
False
这是为什么?简单地说,您的比较不是直接针对类的数据,而是针对类本身的实例(id(Foo(1)),因为您没有明确地编写它的比较 它比较实例的id,因此有时为真,有时为假
Foo(1)
=> <__main__.Foo instance at 0x2a5684>
Foo(1)
=> <__main__.Foo instance at 0x2a571c>
Foo(1)
Foo(1)
=>
傅(1)
=>
傅(1)
你能告诉我们你的函数…或者更确切地说是类是什么样子吗?你的分数实现会很好地看到,或者重载的相关部分。你的\uuuu init\uu
方法呢?尝试向我们展示完整的最小代码。可能发生的情况是,您要么拥有可比较的mixin,要么它只是比较repr中的字符串。我注意到,同样的行为也适用于这个简单的情况:。它只在2.7中这样工作。在3.4中它甚至不会编译。你能解释一下吗。我不明白为什么如果我运行Foo(5)>Foo(2)
它会给出False,然后当我再次运行相同的测试Foo(5)>Foo(2)
它会给出True?你的aI知道,但是id不同,但是为什么每次的比较都不同?当你运行Foo(1)
时,这会实例化一个Foo类,因此,它可以随时变化。但是,如果您执行a=Foo(1)
,并以相同的方式使用a
与b
进行比较,您将始终得到相同的结果,b/c没有任何更改,并且您使用相同的idIt引用相同的变量,这似乎是正确的,但我在python引用中找不到任何支持这一点的内容。我看到的最接近的注释是,大多数其他内置类型的对象比较不相等,除非它们是相同的对象;一个对象比另一个对象小还是大的选择是任意的,但在程序的一次执行中是一致的。但是这会专门调用内置函数,并且在python3文档中也有(这在python3中不起作用)