python操作符重载是如何工作的

python操作符重载是如何工作的,python,pandas,operator-overloading,Python,Pandas,Operator Overloading,我可以理解,某些语言允许用户执行一些运算符重载。我在C++领域首先知道这一点。但是C++对操作符重载也有一些限制,我认为这是合理的。p> 但当我来到python pandams库时。我开始感到困惑 请看一下我的代码 不返回真或假。 这对我来说太疯狂了。有人能帮我理解这一点吗 在Python中,我们可以重载运算符==使其不返回布尔值吗 如果问题1是真的,我如何编写一个简单的代码来演示这一点 从链接复制的一些相关结果: >>> complaints['Complaint Type'

我可以理解,某些语言允许用户执行一些运算符重载。我在C++领域首先知道这一点。但是C++对操作符重载也有一些限制,我认为这是合理的。p> 但当我来到python pandams库时。我开始感到困惑

请看一下我的代码

不返回真或假。

这对我来说太疯狂了。有人能帮我理解这一点吗

  • 在Python中,我们可以重载运算符==使其不返回布尔值吗
  • 如果问题1是真的,我如何编写一个简单的代码来演示这一点
  • 从链接复制的一些相关结果:

    >>> complaints['Complaint Type'] == "Noise - Street/Sidewalk"
    
    0      True
    1     False
    2     False
    3     False
    4     False
    ...
    
    111063    False
    111064    False
    111065    False
    111066     True
    111067    False
    111068    False
    Name: Complaint Type, Length: 111069, dtype: bool
    

    如果您创建自己的类并向其添加
    \uuuuuu eq\uuu
    方法,则可以重载运算符

    class MyClass(object):
    
        def __eq__(self, other):
            # compare self with other, return whatever you need
    
    每当您将您的类型与
    self==other
    进行比较时,都会调用此函数。在python中,从这个函数返回布尔值被认为是非常正常的,因此,如果希望代码对其他开发人员有意义,您可能需要考虑返回任何其他内容


    请参阅此

    上python 2的文档。您正在将标量与数组进行比较,因此返回类型是布尔数组。您在这里期待什么?我敢打赌,对python运算符重载的简单搜索将产生多个重复结果。这与重载无关,这就是numpy/pandas所指的广播(正如@EdChum所指)。如果你将pandas列(arrray)与标量进行比较,你会得到一个布尔数组(如链接中所示)。不确定在这种情况下你还想要或期望得到什么?这里有一个关于广播的链接可能会有所帮助:顺便说一句,如果可能,最好包含从链接粘贴的相关纯文本(我在问题主体中添加了我认为最相关的链接)另外,您通常最好使用pandas字符串函数而不是
    =
    来完成您尝试执行的操作:或者,您可以实现uuu eq_uu方法。
    \uu cmp_uu
    应返回负整数、0或正整数,其中False和True正好满足0和1。对不起,您是对的,eq是正确的操作erator在这里重载-我将更改我的答案以反映这一点。谢谢:)谢谢@srowland,我认为Python对eq也有一些限制,它必须返回True或False,但事实上没有这样的限制。
    class MyClass(object):
    
        def __eq__(self, other):
            # compare self with other, return whatever you need