Скрытые возможности

Введение

Примеры

  • 2

    Перегрузка оператора

    Все в Python является объектом. Каждый объект имеет несколько специальных внутренних методов, которые он использует для взаимодействия с другими объектами. Как правило, эти методы следуют __action__ именования. В совокупности, это называется как модель данных Python .

    Вы можете перегрузить любого из этих методов. Это обычно используется при перегрузке операторов в Python. Ниже приведен пример перегрузки операторов с использованием модели данных Python. Vector класс создает простой вектор двух переменных. Мы добавим соответствующую поддержку для математических операций двух векторов, используя перегрузку операторов.

    class Vector(object):
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __add__(self, v):
            # Addition with another vector.
            return Vector(self.x + v.x, self.y + v.y)
    
        def __sub__(self, v):
            # Subtraction with another vector.
            return Vector(self.x - v.x, self.y - v.y)
    
        def __mul__(self, s):
            # Multiplication with a scalar.
            return Vector(self.x * s, self.y * s)
    
        def __div__(self, s):
            # Division with a scalar.
            float_s = float(s)
            return Vector(self.x / float_s, self.y / float_s)
    
        def __floordiv__(self, s):
            # Division with a scalar (value floored).
            return Vector(self.x // s, self.y // s)
    
        def __repr__(self):
            # Print friendly representation of Vector class. Else, it would
            # show up like, <__main__.Vector instance at 0x01DDDDC8>.
            return '<Vector (%f, %f)>' % (self.x, self.y, )
    
    a = Vector(3, 5)
    b = Vector(2, 7)
    
    print a + b # Output: <Vector (5.000000, 12.000000)>
    print b - a # Output: <Vector (-1.000000, 2.000000)>
    print b * 1.3 # Output: <Vector (2.600000, 9.100000)>
    print a // 17 # Output: <Vector (0.000000, 0.000000)>
    print a / 17 # Output: <Vector (0.176471, 0.294118)>
    
     

    Приведенный выше пример демонстрирует перегрузку основных числовых операторов. Полный список можно найти здесь .

Синтаксис

Параметры

Примечания