Python 강좌 : 제 36강 - 매직 메서드 (2)
매직 메서드(Magic Method)
매직 메서드(Magic Method)
는 미리 정의되어 있는 메서드들을 재정의
하여 클래스를 활용할 수 있도록 변경합니다.
내장 함수들이 처리하는 연산을 변경해 사용자 정의 클래스나 함수 등을 효율적으로 사용할 수 있습니다.
Underscore(_)
를 두 번 사용해 매직 메서드를 정의할 수 있습니다.
- Tip : 매직 메서드는
이중 밑줄(Double Underscore)
를 사용해 정의합니다.
산술 연산 정의
- 결과
- 8
8.076923
8.076923
정방향 연산자
정방향 연산자는 x + y
에 대한 연산을 정의합니다.
인스턴스의 값이 x
가 되며, 외부 값이 y
가 됩니다.
예제는 y
를 int로 변환 후, 연산합니다.
역방향 연산자
정방향 연산자는 y + x
에 대한 연산을 정의합니다.
인스턴스의 값이 x
가 되며, 외부 값이 y
가 됩니다.
예제는 y
를 변환 없이 연산합니다.
복합 대입 연산자
복합 대입 연산자는 x += y
에 대한 연산을 정의합니다.
인스턴스의 값이 x
가 되며, 외부 값이 y
가 됩니다.
예제는 y
를 절댓값으로 변환하고 연산합니다.
산술 연산자 | 의미 | 역방향 | 복합 대입 |
---|---|---|---|
object.__add__(self, other) | object + other 연산 정의 | __radd__ | __iadd__ |
object.__sub__(self, other) | object - other 연산 정의 | __rsub__ | __isub__ |
object.__mul__(self, other) | object * other 연산 정의 | __rmul__ | __imul__ |
object.__matmul__(self, other) | object @ other 연산 정의 | __rmatmul__ | __imatmul__ |
object.__truediv__(self, other) | object / other 연산 정의 | __rtruediv__ | __itruediv__ |
object.__floordiv__(self, other) | object // other 연산 정의 | __rfloordiv__ | __ifloordiv__ |
object.__mod__(self, other) | object % other 연산 정의 | __rmod__ | __imod__ |
object.__pow__(self, other[, modulo]) | pow() 연산 정의 | __rpow__ | __ipow__ |
object.__divmod__(self, other) | divmod() 연산 정의 | __rdivmod__ | __idivmod__ |
object.__round__(self) | round() 연산 정의 | 없음 | 없음 |
object.__trunc__(self) | math.trunc() 연산 정의 | 없음 | 없음 |
object.__floor__(self) | math.floor() 연산 정의 | 없음 | 없음 |
object.__ceil__(self) | math.ceil() 연산 정의 | 없음 | 없음 |
단항 연산 정의
- 결과
- 7
3
-5
-6
__pos__ : Positive
+object 연산자는 +x
에 대한 연산을 정의합니다.
예제는 x
를 양수를 곱하지 않고, +2
연산으로 변경합니다.
__neg__ : Negative
-object 연산자는 -x
에 대한 연산을 정의합니다.
예제는 x
를 음수를 곱하지 않고, -2
연산으로 변경합니다.
__abs__ : Absolute
abs() 연산자는 abs(x)
에 대한 연산을 정의합니다.
예제는 x
를 절대값으로 취하지 않고, 음수로 변경합니다.
__invert__ : Invert
~object 연산자는 ~x
에 대한 연산을 정의합니다.
예제는 ~x
를 변환 없이 연산합니다.
단항 연산자 | 의미 |
---|---|
object.__pos__(self) | +object 연산 정의 |
object.__neg__(self) | -object 연산 정의 |
object.__abs__(self) | abs() 연산 정의 |
object.__invert__(self) | ~object 연산 정의 |
비트 연산 정의
비트 연산자 중 not
연산자는 재정의할 수 없으며, __bool__
연산자를 통해 변경할 수 있습니다.
또는 ~object
연산자를 재정의해 not
연산자로 활용할 수 있습니다.
비트 연산자 | 의미 | 역방향 | 복합 대입 |
---|---|---|---|
object.__lshift__(self, other) | object « other 연산 정의 | __rlshift__ | __ilshift__ |
object.__rshift__(self, other) | object » other 연산 정의 | __rrshift__ | __irshift__ |
object.__and__(self, other) | object & other 연산 정의 | __rand__ | __iand__ |
object.__or__(self, other) | object | other 연산 정의 | __ror__ | __ior__ |
object.__xor__(self, other) | object ^ other 연산 정의 | __rxor__ | __ixor__ |
비교 연산 정의
비교 연산자는 역방향 연산자
와 복합 대입 연산자
는 존재하지 않습니다.
정방향 연산자만 정의할 수 있으며, 역방향
으로 연산할 경우, 정방향으로 간주됩니다.
비교 연산자 | 의미 |
---|---|
object.__lt__(self, other) | object < other 연산 정의 |
object.__le__(self, other) | object <= other 연산 정의 |
object.__eq__(self, other) | object == other 연산 정의 |
object.__ne__(self, other) | object != other 연산 정의 |
object.__gt__(self, other) | object > other 연산 정의 |
object.__ge__(self, other) | object >= other 연산 정의 |
형식 변환 정의
- 결과
- C
형식 변환은 인스턴스의 형식을 변환할 때 사용됩니다.
그 중, __index__
는 slice 연산을 진행할 때 할당되는 index
를 정의합니다.
예제의 index
의 값을 2
로 정의하여, 리스트에서 C
가 출력됩니다.
형식 변환 | 의미 |
---|---|
object.__int__(self) | int() 연산 정의 |
object.__float__(self) | float() 연산 정의 |
object.__complex__(self) | complex() 연산 정의 |
object.__bool__(self) | bool() 연산 정의 |
object.__hash__(self) | hash() 연산 정의 |
object.__index__(self) | slice 연산의 index 정의 |
댓글 남기기