int 클래스에는 __add__와 __radd__라는 메서드가 있다. __add__는 int + 무언가를 연산할 때 호출되는 메서드이고, __radd__는 무언가 + int를 연산할 때 호출되는 메서드이다. 이는 int 뿐만이 아니라 다른 클래스에서도 구현할 수 있다.
class Asdf:
def __add__(self, value):
return 2 + value
asdf = Asdf()
a0 = asdf + 3
print(a0) # 5
class Asdf에 __add__ 메서드를 구현했다. asdf + 3을 연산할 때 __add__ 메서드의 value 매개변수에는 3이 들어간다. 결과는 5가 나온다.
class Asdf:
def __add__(self, value):
return 2 + value
asdf = Asdf()
a0 = 3 + asdf # TypeError: unsupported operand type(s) for +: 'int' and 'Asdf'
print(a0)
그러나 __add__만 구현하면 이런 문제점이 생긴다. asdf + 3은 되면서 3 + asdf는 안 되는, 논리적으로 말이 안 되는 상황이 발생한다.
class Asdf:
def __add__(self, value):
return 2 + value
def __radd__(self, value):
return 5 + value
asdf = Asdf()
a0 = 3 + asdf
print(a0) # 8
__radd__도 구현해주면 3 + asdf를 연산할 수 있다. 결과는 8이 나온다. 이렇게 asdf + 3의 값과 3 + asdf의 값이 달라지게 만들 수도 있다.
'python > uncategorized' 카테고리의 다른 글
python 실행 중 코드 수정 (0) | 2021.08.14 |
---|---|
시간 복잡도와 이중 for문 (0) | 2021.06.04 |
for문 도중 값이 바뀌는 것에 주의 (0) | 2021.05.19 |
while문에서 time.sleep의 중요성 (0) | 2021.05.17 |
python mmap ipc (0) | 2021.04.20 |
댓글