class x:
    def __init__(self,name):
        self.name=name

    def __str__(self):
        return self.name

    def __cmp__(self,other):
        print("cmp method called with self="+str(self)+",other="+str(other))
        return self.name==other.name
       # return False


instance1=x("hello")
instance2=x("there")

print(instance1==instance2)
print(instance1.name==instance2.name)

这里的输出是:

cmp method called with self=hello,other=there
True
False

这不是我所期望的:我想说的是“如果名称字段相等,则两个实例是平等的”。

如果我只是 return False 来自 __cmp__ 功能,此报告为 True 也是!如果我返回 -1, ,那我得到 False - 但是,由于我试图比较字符串,所以这感觉不正确。

我在这里做错了什么?

有帮助吗?

解决方案

__cmp__(x,y) 如果返回负数(例如-1)如果 x < y, ,一个正数(例如1) x > y 和0如果 x == y. 。您绝对不应该返回布尔值。

您的超载是 __eq__(x, y).

其他提示

__cmp__ 方法应返回-1、0或1,当自我<其他,self ==其他,self>其他方面。

你可以做

return cmp(self.name, other.name)

在您的代码中以获得适当的结果

你很困惑 __cmp____eq__.

从文档 __cmp__:

如果self <其他,则应返回一个负整数,如果self ==其他,则零,如果是self>其他,则是一个正整数。

__eq__ 返回一个布尔值,该布尔人确定两个对象是否相等, __cmp__ 返回一个整数,该整数确定两个对象是否比彼此大或少于彼此,除非您有特定 __eq__, __ne__, __le__, __ge__, __lt____gt__ 方法。

在您的情况下,您确实想要一个 __cmp__ 方法而不是 __eq__ 因为它可以节省您实施其他5种方法进行其他比较。

您可以使用 cmp() 功能 并将以下内容放入您的 __cmp__ 方法:

return cmp(self.name,other.name)

笔记, 正如Ignacio突出的那样 这是 不是Python 3.0中的首选方法, ,但在Python 2.x __cmp__ 是要走的路。

Microsoft现在已禁用MicroFeed在网站内容中的视图和“操作”在列表项中等待事件。

解决方法

打开SharePoint Designer

单击所有文件>列表>右键单击已发布的Feed>属性>在设置下从浏览器中的隐藏并保存。 然后返回工作流程,然后选择“等待列表项”的“等待事件”,然后,Microfeab现在应该再次可见。

查找文档 __cmp__, ,您应该返回一个整数:

如果self <其他,则应返回一个负整数,如果self ==其他,则零,如果是self>其他,则是一个正整数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top