티스토리 뷰
📌 특수 메서드 (매직 메서드)
클래스 내부에 선언할 수 있는 특수 메서드를 말한다. 파이썬에서 사용되고 있는 연산자나 함수를 오버 로딩할 수 있다. 기존에 사용되고 있는 연산자나 함수를 오버 로딩하므로, 특수 메서드는 이미 정해진 이름을 사용해야 한다.
📍 특수 메서드는 메서드명 전 후로 이중 언더바를 가지고 있다 (예) __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__로는 이항 연산만이 가능하다.
[참고] 엘리스 트랙-혼자 공부하는 파이썬 / 길벗-파이썬 코딩 도장 / 엘리스 트랙 - 예제 중심의 파이썬 입문 / 위키백과
'BackEnd > Python' 카테고리의 다른 글
[파이썬 기초] 05-4. 데코레이터 (0) | 2021.03.24 |
---|---|
[파이썬 기초] 05-3. 상속과 추상 클래스 (0) | 2021.03.23 |
[파이썬 기초] 05-1. 객체와 클래스 (0) | 2021.03.23 |
[파이썬 기초] 03-1. 내장 함수 사용하기(o-z) (0) | 2021.03.22 |
[파이썬 기초] 03-1. 내장 함수 사용하기(f-m) (0) | 2021.03.22 |