파이썬의 클래스에는 특별한 메서드가 몇 개 있다. 간단한 개요를 살펴보고 코드에서 용도를 확인해 보자.
__del__() 메서드
소멸자(Destructor)로 불리는 __del__() 메서드는 생성자와 반대로 인스턴스를 삭제할 때 자동으로 호출된다. 인스턴스를 삭제할 때는 del(인스턴스)로 지우는데, 이때 호출된다. 프로그램의 논리상 인스턴스가 삭제될 때 어떤 작업이 필요하다면 __del__() 메서드 안에 작성한다.
__repr__() 메서드
인스턴스를 print() 문으로 출력할 때 실행되는 메서드이다. print(인스턴스)를 실행하면 호출된다.
__add__() 메서드
인스턴스 사이에 덧셈 작업이 일어날 때 실행되는 메서드이다. 일반적으로 덧셈(+) 연산은 숫자나 문자열, 리스트 등에서만 작동하는데, __add__() 메서드를 작성하면 인스턴스 사이의 덧셈 작업도 가능하다.
비교 메서드: __lt__(), __le__()_, __gt__(), __ge__(), __eq__(), __ne__()
인스턴스 사이의 비교 연산자(<, <=, >, >=, ==, != 등)를 사용할 때 호출되는 메서드이다.
다음 코드를 통해 직접 확인해 보자.
## 클래스 선언 부분 ##
class Line:
length = 0
def __init__(self, length):
self.length = length
print(self.length, '길이의 선이 생성되었습니다')
def __del__(self):
print(self.length, '길이의 선이 삭제되었습니다.')
def __repr__(self):
return '선의 길이: ' + str(self.length)
def __add__(self, other):
return self.length + other.length
def __lt__(self, other):
return self.length == other.length
## 메인 코드 부분 ##
myLine1 = Line(100)
myLine2 = Line(200)
print(myLine1)
print('두 선의 길이 합: ', myLine1 + myLine2)
if myLine1 < myLine2:
print('선분 2가 선분 1 보다 더 깁니다.')
elif myLine1 == myLine2:
print('두 선분의 길이가 같습니다.')
else:
print('모르겠습니다.')
del(myLine1)
출력결과
100 길이의 선이 생성되었습니다
200 길이의 선이 생성되었습니다
선의 길이: 100
두 선의 길이 합: 300
모르겠습니다.
100 길이의 선이 삭제되었습니다.
200 길이의 선이 삭제되었습니다.
'ETC' 카테고리의 다른 글
[OS] (동기/비동기) 와 (블럭/논블록의) 차이 (0) | 2022.04.11 |
---|---|
[python] 클래스 변수와 __dict__ (0) | 2021.12.14 |
[python] Broadcasting(브로드캐스팅) (0) | 2021.12.14 |
[python] List보다 Numpy 가 빠른 이유 (0) | 2021.11.21 |
모의 객체(Mock Object) 란? (0) | 2021.11.19 |
[python] 가변 매개변수(Arrbitary Argument) 란? (0) | 2021.11.09 |
댓글