728x90
연산자 오버로딩 기본 지식
연산자 오버로딩은 사용자 정의 객체가 중위 연산자(ex. +
, |
)나 단항 연산자(ex. -
, ~
)를 사용할 수 있게 해줌
하지만 남용되기 쉬어 파이썬에서는 아래 제한을 두어 융통성, 사용성, 안전성을 유지함
- 내장형의 연산자는 오버로드 할 수 없다
- 새로운 연산자를 만들 수 없으며, 기존 연산자를 오버로드할 수만 있다.
is
,and
,or
,not
연산자는 오버로드할 수 없다. (그러나&
,|
,~
비트 연산자는 오버로드할 수 있다.)
단항 연산자
__neg__()
가 구현하는-
__pos__()
가 구현하는+
__invert__()
가 구현하는~
+
연산자 오버로딩 __add__(self, other)
벡터 덧셈을 정의
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # Vector(4, 6)
*
연산자 오버로딩 __mul__(self, scalar)
스칼라 곱 정의 (벡터 * 숫자)
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
def __repr__(self):
return f"Vector({self.x}, {self.y})"
v = Vector(2, 3)
print(v * 5) # Vector(10, 15)
@
연산자 오버로딩 __matmul__(self, other)
벡터의 내적 또는 행렬곱 표현
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __matmul__(self, other):
return self.x * other.x + self.y * other.y # 내적
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 @ v2) # 1*3 + 2*4 = 11
References
-『 전문가를 위한 파이썬(2판) 』, 루시아누 하말류, 한빛미디어, Part 1 - Chapter 16
- 이외 비교 연산자, 복합 할당 연산자는 나중에 필요할 때 찾아보자.
728x90
'CS' 카테고리의 다른 글
[Python] 반복자, 제너레이터, 고전적인 코루틴 (0) | 2025.05.03 |
---|---|
[Python] 데코레이터는 언제 실행되나요? - import (1) | 2025.04.20 |
[Python] 자료형 힌트 조금 더 알아보기 (0) | 2025.04.19 |
[Python] 상속: 득과 실 (0) | 2025.04.19 |
[Python] 인터페이스, 프로토콜, 추상 베이스 클래스 (1) | 2025.04.13 |