본문 바로가기
Python/기초

[파이썬/Python] Class에 특별한 메서드

by 모두의 케빈 2023. 7. 12.

이전 시간에는 클래스 기초, 클래스 심화, 그리고 클래스 안의 메서드의 종류에 대해 배웠습니다. 이번 시간에는 Class 안에서 사용할 수 있는 특별한 메서드들에 대해 알아보도록 하겠습니다.

 

 

Class의 특별한 메서드들


 

Class에는 특별한 메서드들이 있습니다. 저희는 그중에 하나를 이미 알고 있습니다. 바로 __init__() 메서드입니다. 이 메서드는 Class의 Instance가 선언됨과 동시에 실행되는 메서드입니다.

이 __init__처럼 미리 이름과 용법이 정의된 Class 메서드들을 알아보겠습니다.

 

__repr__()

__repr__ 메서드는 Class로부터 Instance가 선언될 때, 혹은 Instance가 호출될 때, 그리고 Instance를 print 할 때 실행되는 메서드입니다.

저에 대한 정보를 담은 human Class를 만들었습니다. __repr__ 메서드는 저의 이름과 직업을 print 하도록 코딩했습니다.

class human():
    def __init__(self):
        self.name = 'kevin'
        self.job = 'blogger'
        self.gender = 'man'
        
    # 인스턴스를 호출하거나 print하면 동작
    def __repr__(self):
        return f'I am {self.name} and my job is {self.job}'

 

아래는 __repr__ 메서드의 사용 예시입니다. 각각의 예시를 읽어보시고, 어떤 점에서 차이가 있는지 확인해 보시기 바랍니다.

# 첫 번째: 생성된 인스턴스를 print할 때
me = human()
print(me)

# 두 번째: 인스턴스를 생성/선언할 때
human()

# 세 번째: 인스턴스를 호출할 때
me = human()
me

 

 

__del__()

__del__ 메서드는 인스턴스를 삭제하고 값을 return 해줍니다. 이 return이 __del__ 메서드와 del 함수의 차이점이자 핵심입니다. 우선 아래 코드를 보시면, __del__ 메서드를 실행하면 print를 하도록 설정해 둔 코드입니다.

class human():
    def __init__(self):
        self.name = 'kevin'
        self.job = 'blogger'
        self.gender = 'man'
    
    def __del__(self):
        return "class가 성공적으로 삭제되었습니다."
        

# __del__ method 실행하는 방법
me = human()
me.__del__()

# 위 코드의 실행결과
'class가 성공적으로 삭제되었습니다.'

 

재밌는 건 __del__ 메서드의 return 값을 5로 하면 인스턴스가 삭제된 다음 5를 return 한다는 점입니다. del 함수를 사용해도 인스턴스를 지울 수 있지만, 아무런 피드백이 없어서 실행이 잘 됐는지 긴가민가 할 텐데요. 인스턴스를 삭제하고 메시지를 피드백받고 싶거나, 삭제 이후 어떤 액션이 이어지도록 하려면 __del__ 메서드를 사용하시면 될 것 같습니다.

class human():
    def __init__(self):
        self.name = 'kevin'
        self.job = 'blogger'
        self.gender = 'man'
    
    def __del__(self):
        return 5
        
me = human()
a = me.__del__()

print(a) # a에는 return된 5가 들어있다.

 

 

__add__()

__add__ 메서드는 인스턴스 간 덧셈 연산을 지원합니다. 덧셈 연산은 사용자가 정의하기 나름인데요. 저는 인스턴스의 이름 속성을 더하는 __add__ 메서드를 만들어보겠습니다.

__add__ 함수는 자기 자신(인스턴스)과 다른 인스턴스를 인자로 받아서 인스턴스의 name 속성에 접근하여 두 문자열을 더한 값을 반환합니다.

class human():
    def __init__(self,name,job):
        self.name = name
        self.job = job
    
    def __add__(self, other_instance):
        return self.name + ' and ' +other_instance.name
        
        
        
me = human('kevin', 'blogger')
you = human('Ji','banker')

me.__add__(you)

#위 코드의 실행 결과
'kevin and Ji'

 

댓글