Python Language Sovraccarico dell'operatore


Esempio

Tutto in Python è un oggetto. Ogni oggetto ha alcuni metodi interni speciali che usa per interagire con altri oggetti. In generale, questi metodi seguono la convenzione di denominazione __action__ . Collettivamente, questo è definito come il modello di dati Python .

Puoi sovraccaricare uno di questi metodi. Questo è comunemente usato nel sovraccarico dell'operatore in Python. Di seguito è riportato un esempio di overloading dell'operatore utilizzando il modello di dati Python. La classe Vector crea un vettore semplice di due variabili. Aggiungeremo il supporto appropriato per le operazioni matematiche di due vettori utilizzando l'overloading dell'operatore.

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'esempio sopra mostra l'overloading degli operatori numerici di base. Un elenco completo può essere trovato qui .