首页 文章详情

Python之运算符重载

ProjectDaedalus | 84 2024-05-27 07:37 0 0 0
UniSMS (合一短信)

Python提供了对运算符重载的特性

1413cf7c5f2dca84c0a21b3381065213.webpabstract.png 实践

Python中的每个运算符都有对应的方法,可在自定义类中重新实现相应的方法,实现改变运算符的行为。这里对常见运算符进行重载

      
      
class MyVector:
    """
    二维向量
    """

    
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __str__(self):
        return f"[My Vector] x:{self.x}, y:{self.y}"

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        return MyVector(x,y)
    
    def __mul__(self, num):
        x = self.x * num
        y = self.y * num
        return MyVector(x,y)

    def __neg__(self):
        return MyVector(-1*self.x, -1*self.y)

    def __gt__(self, other):
        self_sum = self.x + self.y
        other_sum = other.x + other.y
        if( self_sum > other_sum ) :
            return True
        else:
            return False

加法运算符

使用+加法运算符时,Python会自动调用自定义对象的__add__()方法

      
      print("重载+加法运算符")
my_vector3 = MyVector(1,2)
my_vector4 = MyVector(5,7)
my_vector5 = my_vector3 + my_vector4
print("my_vector3: ", my_vector3)
print("my_vector4: ", my_vector4)
print("my_vector3 + my_vector4: ", my_vector5)
adc098ba24c2d9393cb3eeb3940b65a6.webpfigure 1.png

乘法运算符

使用*乘法运算符时,Python会自动调用自定义对象的__mul__()方法

      
      print("重载*乘法运算符")
my_vector6 = MyVector(3,7)
my_vector7 = my_vector6 * 2
print("my_vector6: ", my_vector6)
print("my_vector6 * 2: ", my_vector7)
472488325cbaa468dd5947fa52875450.webpfigure 2.png

取负运算符

使用-取负运算符时,Python会自动调用自定义对象的__neg__()方法

      
      print("重载-取负运算符")
my_vector1a = MyVector(11,22)
my_vector1b = -my_vector1a
my_vector2a = MyVector(33,-44)
my_vector2b = -my_vector2a
print(f"my_vector1a -->> {my_vector1a}, my_vector1b -->> {my_vector1b};")
print(f"my_vector2a -->> {my_vector2a}, my_vector2b -->> {my_vector2b};")
7d412fc181bcbd0d6f1509f10aa8b6c9.webpfigure 3.png

大于运算符

使用>大于运算符时,Python会自动调用自定义对象的__gt__()方法

      
      print("重载大于运算符")
my_vector8 = MyVector(111,222)
my_vector9 = MyVector(1,2)
print(f"my_vector8 > my_vector9 : {my_vector8 > my_vector9}")
3c97cfd08162676bbab5f152990629b9.webpfigure 4.png 参考文献
  1. Python编程·第3版:从入门到实践 Eric Matthes著
  2. Python基础教程·第3版 Magnus Lie Hetland著
  3. 流畅的Python·第1版 Luciano Ramalho著


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter