Zoeken…


Overbelasting operator

Alles in Python is een object. Elk object heeft een aantal speciale interne methoden die het gebruikt om te communiceren met andere objecten. Over het algemeen volgen deze methoden de __action__ . Dit wordt gezamenlijk het Python-gegevensmodel genoemd .

U kunt elk van deze methoden overbelasten. Dit wordt vaak gebruikt bij het overbelasten van de operator in Python. Hieronder ziet u een voorbeeld van overbelasting van de operator met het gegevensmodel van Python. De klasse Vector maakt een eenvoudige vector van twee variabelen. We voegen passende ondersteuning toe voor wiskundige bewerkingen van twee vectoren met operatoroverbelasting.

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

Het bovenstaande voorbeeld demonstreert overbelasting van numerieke basisoperatoren. Een uitgebreide lijst is te vinden hier .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow