본문 바로가기
ETC

[python] 클래스의 특별한 메서드

by dkswnkk 2021. 12. 12.

파이썬의 클래스에는 특별한 메서드가 몇 개 있다. 간단한 개요를 살펴보고 코드에서 용도를 확인해 보자.

 

__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 길이의 선이 삭제되었습니다.

댓글