생성자 __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
다음과 같이 볼 수 있다.
예전에 만들어 둔 코드는 수정해서 다시 포스팅할 예정!
'Python' 카테고리의 다른 글
AttributeError: module 'scipy.sparse' has no attribute 'coo_array' (2) | 2022.12.12 |
---|---|
py-hanspell 설치 에러 (0) | 2022.12.04 |
python list 요소를 string 형태로 변환하기 (0) | 2022.12.03 |
python) 상속 개념 super()란 뭘까 (0) | 2022.12.03 |
error) flask run - Could not locate a Flask application. (0) | 2022.12.03 |