티스토리 뷰

📌 특수 메서드 (매직 메서드)

클래스 내부에 선언할 수 있는 특수 메서드를 말한다. 파이썬에서 사용되고 있는 연산자나 함수를 오버 로딩할 수 있다. 기존에 사용되고 있는 연산자나 함수를 오버 로딩하므로, 특수 메서드는 이미 정해진 이름을 사용해야 한다.

 

 

📍  특수 메서드는 메서드명 전 후로 이중 언더바를 가지고 있다 (예) __lt__()

📍  이미 파이썬에서 정의되어 사용되고 있는 연산자나 함수를 클래스 내부에 오버로딩한다.

📍  기존에 사용 중인 연산자나 함수를 오버 로딩하므로 이미 정해진 이름을 그대로 사용해야 한다.

📍  메서드 호출 시에는 파이썬에서 통용되는 연산자와 함수명으로 호출한다.

 

 

참고. WikiDocs - 왕초보를 위한 파이썬 / WikiDoc - 레벨업 파이썬


👉 특수 메서드의 종류

__del__( ) 인스턴스 삭제 __sub__( ) - __lt__( ) <
__len__( ) 인스턴스 길이 __mul__( ) * __le__( ) <=
__repr__( ) 인스턴스 출력 __floordiv__( ) // __gt__( ) >
__str__( ) 문자열로 형변환 __truediv__( ) / __ge__( ) >=
__cmp__( ) 인스턴스 비교 __mod__( ) % __eq__( ) ==
__add__( ) + __pow__( ) ** __ne__( ) !=

 

✔  이 외에도 여러 특수 메서드를 사용할 수 있다. (생성자 메서드인 __init__( ) 역시 특수 메서드 중 하나)

✔  is, and, or, not, = 은 오버 로딩이 불가능한 연산자이므로 참고하자.

✔  아래에서 특수 메서드 몇 가지만 예제를 통해 구현해보자.

 

👉 __repr__( )

class Word :
    def __init__(self, txt) :
    	self.txt = txt
        
#메인 루틴   
word1 = Word('Apple')
word2 = Word('Orange')

print(word1)
print(word2)

✔  인스턴스 출력을 의미하는 특수 메서드 __repr__( )를 구현하지 않고 print문을 사용하면

✔  위와 같이 현재 참조하고 있는 객체의 레퍼런스를 출력한다.

class Word :
    def __init__(self, txt) :
    	self.txt = txt
        
    #특수메서드 __repr__() 구현
    def __repr__(self) :
    	return str(self.txt)


#메인 루틴   
word1 = Word('Apple')
word2 = Word('Orange')
word3 = Word(100)

print(word1)
print(word2)
print(word3)

✔  특수 메서드를 사용해 멤버 변수를 출력하도록 구현할 수 있다.

✔  객체 명을 사용해 호출하면 멤버 변수의 데이터를 문자열로 형 변환하여 반환하도록 구현한다.

 

👉 __add__( )

class Sum :
    def __init__(self, num) :
    	self.num = num
        
#메인 루틴   
num1 = Sum(20)
num2 = Sum(40)

print(num1+num2)

✔  클래스 객체 사이의 + 연산을 특수 메서드로 구현하지 않으면 위와 같은 에러가 발생한다.

✔  파이썬의 + 연산자는 클래스 객체의 연산을 제공하지 않기 때문이다.

✔  그렇기 때문에 우리는 특수 메서드를 클래스 내부에 기능을 확장해 구현한 뒤 사용해야 한다.

class Sum :
    def __init__(self, num) :
    	self.num = num
        
    #특수메서드 __add__() 구현
    def __add__(self,other) :
        return self.num + other.num
        
#메인 루틴   
num1 = Sum(20)
num2 = Sum(40)

print(num1+num2)

✔  객체 자기 자신을 가리키는 self와 함께 사용된 객체를 가리키는 other을 매개변수로 받는다.

✔  이렇게 구현한 특수 메서드 __add__로는 이항 연산만이 가능하다.

 

 

 

 

[참고] 엘리스 트랙-혼자 공부하는 파이썬 / 길벗-파이썬 코딩 도장 / 엘리스 트랙 - 예제 중심의 파이썬 입문 / 위키백과

댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday