본문 바로가기
파이썬

파이썬 스페셜 메소드

by 코낄2 2023. 9. 17.

1. 스페셜 메소드

파이썬의 스페셜 메서드 (또는 매직 메서드라고도 불림)는 더블 언더스코어(__)로 시작하고 끝나는 메서드 이름을 갖습니다. 이 메서드들은 특정 구문이나 내장 함수를 사용할 때 파이썬 인터프리터에 의해 자동으로 호출됩니다.

예를 들어, 객체에 대해 + 연산자를 사용하면 해당 객체의 __add__ 메서드가 호출됩니다. 클래스에서 사용했던 __init__메소드도 객체를 초기화해주는 스페셜 메소드 입니다.

  • __str__ : 객체를 문자열로 표현하는 메서드. print() 함수나 str() 함수를 사용할 때 호출
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))
 
# str메소드를 오버라이드 하기
class Book:
    def __init__(self,title):
        self.title = title

    def __str__(self):
        return self.title
book = Book('미친듯이 재밌는 파이썬')
print(book)  >> 미친듯이 재밌는 파이썬
  • __add__ : + 연산자를 사용할  호출되는 메서드
# add메소드를 오버라이드 하기
class Calc:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return self.value + other.value
 
result = num1 + num2
print(result)  >> 15
  • __len__ : len() 함수를 사용할 때 호출되는 메서드
# len메소드를 오버라이드 하기
class Queue:
    def __init__(self, *args):
        self.items = list(args)

    def __len__(self):
        return len(self.items)
 
queue = Queue(1,2,3,4,5,9)
print(len(queue))   >> 6
  •  __getitem__ : 인덱싱을 사용할  호출되는 메서드
# getitem메소드를 오버라이드 하기
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __getitem__(self, index):
        if index == 0:
            return self.x
        elif index == 1:
            return self.y
        else:
            return -1
 
p1 = Point(3,4)
print(p1[0])   >> 3
print(p1[1])   >> 4
print(p1[2])   >> -1
  • __call__ : 객체를 함수처럼 호출할  사용되는 메서드
# call메소드를 오버라이드 하기
class Callableobject:
    def __call__(self, *args, **kwargs):
        print(f'Called with arguments:{args}and keyword arguments:{kwargs}')
 
callable_obj = Callableobject()
# * 는 튜플, **는 딕셔너리 키=값 형태를 받기때문에 해당 값을 입력하면 알아서 구분한다.
callable_obj(1,2,3,4,10, userid = 'apple', age = 20)
>> Called with arguments:(1, 2, 3, 4, 10)and keyword arguments:{'userid': 'apple', 'age': 20}
 

'파이썬' 카테고리의 다른 글

Streamlit/GPT API 이용해보기  (0) 2023.11.22
파이썬 예외처리  (0) 2023.09.17
파일 입출력 라이브러리2  (0) 2023.09.14
파일 입출력 라이브러리  (0) 2023.09.14
super()메소드와 다중상속  (0) 2023.09.13