직접 정의한 클래스에 의해 생성된 객체는 기본적으로 연산이 불가능합니다.
연산자 오버로딩
직접 정의한 클래스의 객체에 +, -, *와 같은 일반 연산을 적용하려면, 객체를 연산 가능한(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 |