python运算符重载

刚刚学习python,对于运算符重载,也不是很懂,个人理解如下:

类的专有方法(未截完):

python运算符重载python运算符重载

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

表示python创建的类中有这么多的方法,这些方法是类预定义的,在类的实例进行一些操作时,会调用相关的方法。

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart

    # def __str__(self):
    #     return "r is {0}, i is {1}".format(self.r, self.i)
x = Complex(2.0, -4.4)
print(x)
Complex类在没有重载__str__(self)方法时

输出如下

<__main__.Complex object at 0x011A8410>   即地址


class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart

    def __str__(self):
        return "r is {0}, i is {1}".format(self.r, self.i)

x = Complex(2.0, -4.4)
print(x)

在Complex类重载__str__(self)方法后

输出如下

r is 2.0, i is -4.4

在这里类似Java中的重写toString()方法。


如果想对实例进行+,- 等运算符操作

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
    # def __add__(self, other):
    #     return self.i + self.r + other;

x = Complex(2.0, -4.4)
print(x + 2)
没有重载__add__()方法时:报错了(错误是不支持操作类型+)

Traceback (most recent call last):
  File "F:/pycharm/workspace/test21.py", line 9, in <module>
    print(x + 2)
TypeError: unsupported operand type(s) for +: 'Complex' and 'int'


在重载__add__()方法后

class Complex:
    def __init__(self, realpart, imagpart):
        self.r = realpart
        self.i = imagpart
    def __add__(self, other):
        return self.i + self.r + other;

x = Complex(2.0, -4.4)
print(x + 2)

正常输出(精度异常)

-0.40000000000000036