직접 정의한 클래스에 의해 생성된 객체는 기본적으로 연산이 불가능합니다.

연산자 오버로딩

직접 정의한 클래스의 객체에 +, -, *와 같은 일반 연산을 적용하려면, 객체를 연산 가능한(operable) 상태로 만들어야 합니다. 연산자 오버로딩을 통해 이를 구현하며, 이전에 언급했던 매직 메소드를 클래스에 정의하여 연산자 오버로딩을 구현할 수 있습니다.

여기서는 __add__라는 매직 메소드를 구현했습니다. 이는 해당 객체에 대한 + 연산을 오버로딩합니다. 이렇게 되면, 객체에 + 연산이 이루어질 경우 Python 인터프리터가 __add__ 메소드를 호출합니다. 함수 내부에서는 self(객체 자신)other(더하고자 하는 값)을 명시하였습니다.

  • other가 Number 클래스의 객체라면 self.n과 other.n을 더해 Number 객체를 만들어 반환하고
  • other가 int 클래스의 객체(정수)라면 self.n과 other를 더해 Number 객체를 만들어 반환합니다.

연산자 오버로딩 메소드의 종류

Python에서 사용되는 모든 연산자들은 매직 메소드로 정의하여 오버로딩 가능합니다.

  • __add__(self, other) : 이항 + 연산자(A + B, A += B)
  • __sub__(self, other) : 이항 - 연산자(A - B, A -= B)
  • __mul__(self, other) : 이항 * 연산자(A * B, A *= B)
  • __truediv__(self, other) : 이항 / 연산자(A / B, A /= B)
  • __floordiv__(self, other) : 이항 // 연산자(A // B, A //= B)
  • __mod__(self, other) : 이항 % 연산자(A % B, A %= B)
  • __pow__(self, other) : 이항 연산자(A B, pow(A, B))
  • __lshift__(self, other) : 이항 << 연산자(A << B, A <<= B)
  • __rshift__(self, other) : 이항 >> 연산자(A >> B, A >>= B)
  • __and__(self, other) : 이항 & 연산자(A & B, A &= B)
  • __xor__(self, other) : 이항 ^ 연산자(A ^ B, A ^= B)
  • __or__(self, other) : 이항 | 연산자(A | B, A |= B)
  • __not__(self) : 단항 ~ 연산자(~A)
  • __abs__(self) : 단항 절대값 연산자(abs(A))

비교 연산자 오버로딩

비교 연산자들도 오버로딩 가능합니다.

비교 연산자 오버로딩 메소드의 종류

  • __lt__(self, other) : < 연산자 - Less than(self가 other 미만인지)
  • __le__(self, other) : <= 연산자 - Less than or equal to(self가 other 이하인지)
  • __gt__(self, other) : > 연산자 - Greater than(self가 other 초과인지)
  • __ge__(self, other) : >= 연산자 - Greater than or equal to(self가 other 이상인지)
  • __eq__(self, other) : == 연산자 - Equal to(self와 other가 같은지)
  • __ne__(self, other) : != 연산자 - Not equal to(self와 other가 다른지)


'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] 사용자 정의 에러  (0) 2018.07.05
[Python] 에러 처리  (0) 2018.07.04
[Python] 언더스코어와 magic method  (0) 2018.07.01
[Python] 클래스의 상속  (0) 2018.06.30
[Python] 객체지향  (0) 2018.06.29

+ Recent posts