Python

special method, __add__ , __iadd__

summerorange 2022. 12. 4. 00:46
반응형

생성자 __init__은 제외하고,

비교 연산자의 special method

object는 해당 인스턴스 객체를 호출한 다음 호출하는 것

< 를 클래스 내부에서 __it__형태로 구현했다면

a = Calculator() 로 호출해서,

a < 5 등 으로 확인할 수 있음.

<
object.__lt__(self, other)
<=
object.__le__(self, other)
==
object.__eq__(self, other)
!=
object.__ne__(self, other)
>=
object.__ge__(self, other)
>
object.__gt__(self, other)

+, -, |, &  등의 바이너리 연산자의 특수 메소드. 여기에서 리스트 끼리의 연산을 구현했었다. 리스트 끼리 연산한다면 객체 형태로 반환받는 게 낫다는 걸 구현하면서 익혔다.

+
object.__add__(self, other)
-
object.__sub__(self, other)
*
object.__mul__(self, other)
//
object.__floordiv__(self, other)
/
object.__truediv__(self, other)
%
object.__mod__(self, other)
**
object.__pow__(self, other[, modulo])
<<
object.__lshift__(self, other)
>>
object.__rshift__(self, other)
&
object.__and__(self, other)
^
object.__xor__(self, other)
|
object.__or__(self, other)

특수 메소드 중 확장 연산자

+=
object.__iadd__(self, other)
-=
object.__isub__(self, other)
*=
object.__imul__(self, other)
/=
object.__idiv__(self, other)
//=
object.__ifloordiv__(self, other)
%=
object.__imod__(self, other)
**=
object.__ipow__(self, other[, modulo])
<<=
object.__ilshift__(self, other)
>>=
object.__irshift__(self, other)
&=
object.__iand__(self, other)
^=
object.__ixor__(self, other)
|=
object.__ior__(self, other)

 


__add__는

a + 3 

과 같이 객체를 +로 더하면 해당 값이 나올 수 있도록 코드를 짜면 되고,

만약 나온 결과 값을 다시 특정 객체 형태로 만들어야 한다면, (예를 들어, 생성자인 __init__ 에서 self.mylist = [] 형태로 이미 값을 만들어뒀기 때문에...)

그 클래스 자체를 내부에서 다시 호출할 수 있다. class Calculator 등이 리스트와 같은 객체라면... 그리고 print(self.mylist) 형태를 리스트 형식인 []가 아니라 { } 로 표시하도록 def __str__(self) 에서 수정했다면...

 __str__(self)와 같이 print(a) 형식을 특정 형식으로 구현해뒀기 때문에 객체형태로 반환해줘야 했다. 

__add__(self) 에서 return Calculator(내부에서 계산해서 나온 결과 값) 형태로 객체로 다시 만들어 줄 수 있다. 처음에 이거 몰랐을 땐 class 를 만들었는데 그걸 내부의 def 에서 다시 호출할 수 있다고? 하면서 좀 헷갈렸는데 돌리니 되었다. 


__iadd__ 등의 경우에는

a += 3

과 같이 += 수식이 a에게 적용되도록 코드를 짜면 된다.

그래서 def __iadd__(self, other): 로 한 경우

코드 작성 끝나고 마지막엔 

return self

라고 해줘야 작동한다.

이것과 관련한 참고자료는 하단 글이 도움이 되었다.

https://python-course.eu/oop/magic-methods.php

 

9. Magic Methods | OOP | python-course.eu

9. Magic Methods By Bernd Klein. Last modified: 01 Feb 2022. Introduction The so-called magic methods have nothing to do with wizardry. You have already seen them in the previous chapters of our tutorial. They are special methods with fixed names. They are

python-course.eu

다음과 같이 볼 수 있다.

예전에 만들어 둔 코드는 수정해서 다시 포스팅할 예정!

 

반응형