Python Language Surcharge de l'opérateur


Exemple

Tout en Python est un objet. Chaque objet possède des méthodes internes spéciales qu'il utilise pour interagir avec d'autres objets. Généralement, ces méthodes suivent la convention de nommage __action__ . Collectivement, cela s'appelle le modèle de données Python .

Vous pouvez surcharger l' une de ces méthodes. Ceci est couramment utilisé dans la surcharge des opérateurs en Python. Vous trouverez ci-dessous un exemple de surcharge d'opérateur utilisant le modèle de données Python. La classe Vector crée un vecteur simple de deux variables. Nous allons ajouter un support approprié pour les opérations mathématiques de deux vecteurs en utilisant la surcharge de l'opérateur.

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)>

L'exemple ci-dessus montre une surcharge des opérateurs numériques de base. Une liste complète peut être trouvée ici .