Sök…


Operatörens överbelastning

Allt i Python är ett objekt. Varje objekt har några speciella interna metoder som det använder för att interagera med andra objekt. I allmänhet följer dessa metoder __action__ namnkonventionen. Sammantaget benämns detta som Python-datamodellen .

Du kan överbelasta någon av dessa metoder. Detta används ofta vid överbelastning av operatörer i Python. Nedan visas ett exempel på överbelastning av operatörer med Pythons datamodell. Vector klassen skapar en enkel vektor med två variabler. Vi lägger till lämpligt stöd för matematiska operationer för två vektorer med överbelastning av operatörer.

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

Ovanstående exempel visar överbelastning av grundläggande numeriska operatörer. En omfattande lista finns här .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow