본문 바로가기
python/uncategorized

__add__와 __radd__

by Falto 2021. 8. 10.

dir(int)를 통해 int의 모든 메서드를 훔쳐볼 수 있다.

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

댓글