Python Language 연산자 오버로딩


파이썬의 모든 것은 하나의 객체입니다. 각 객체에는 다른 객체와 상호 작용하는 데 사용되는 몇 가지 특별한 내부 메소드가 있습니다. 일반적으로 이러한 메서드는 __action__ 명명 규칙을 따릅니다. 집합 적으로 이것을 파이썬 데이터 모델 이라고합니다.

이러한 방법 하나를 오버로드 수 있습니다. 이것은 일반적으로 파이썬에서 연산자 오버로딩에 사용됩니다. 다음은 파이썬의 데이터 모델을 사용하는 연산자 오버로딩 예제입니다. 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)>

위의 예제는 기본 숫자 연산자의 오버로드를 보여줍니다. 포괄적 인 목록은 여기 에서 찾을 수 있습니다 .