본문 바로가기
코딩/파이썬

스페셜 메서드

by Song1234 2024. 3. 19.

1. 스페셜 메서드

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

예를 들어, 객체에 대해 + 연산자를 사용하면 해당 객체의 add 메서드가 호출됩니다. 또는 len() 함수를 사용하면 len 메서드가 호출됩니다.

class Book:
    def __init__(self, title):
        self.title = title
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book)) # str메서드가 생략되어있다.

<main.Book object at 0x7f7622e8b4f0>
<main.Book object at 0x7f7622e8b4f0>

class Book:
    def __init__(self, title):
        self.title = title
    def __str__(self): # object에 있는 str 메서드를 오버라이딩 한다.
        return self.title
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))

미친듯이 재밌는 파이썬
미친듯이 재밌는 파이썬

li = [1, 2, 3, 4, 5 ]
print(li)
print(str(li))

결과:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]


class Calc:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return self.value + other.value
num1 = Calc(5)
num2 = Calc(10)
result = num1 + num2 # + 를 오버라이딩
print(result)

결과:
15

class Queue:
    def __init__(self):
        self.items = [1, 2, 3, 4, 5]

    def __len__(self): # len() 을 오버라이딩 
        return len(self.items)
queue = Queue()
print(queue)
print(len(queue))

결과:
<main.Queue object at 0x7f7622e4de40>
5

li = [1, 2, 3, 4, 5]
print(len(li))

결과:
5

파이썬의 내장모듈의 메서드가 이런 구조로 되어 있다는걸 확인 해 볼수 있다.

class Point:
    def __init__(self, x, y): # x와 y의 값을 받아준다.
        self.x = x
        self.y = y

    def __getitem__(self, index):
        if index == 0: # 값의 인덱스가 0이면 x값 반환
            return self.x
        elif index == 1: # 값의 인덱스가 1이면 y값 반환
            return self.y
        else: # 그외 -1 반환
            return -1
pt = Point(5, 3) # pt 객체 x 에 5, y에 3을 담아준다
print(pt[0]) # pt 의 0번째 인덱스 호출
print(pt[1]) # pt 의 1번째 인덱스 호출
print(pt[10]) # pt의 10번째 인덱스 호출

결과:
5 # 인덱스가 0이므로 x값  5 를 반환
3 # 인덱스가 1 이므로 y값 3 을 반환
-1 # 그외의 인덱스 이므로 -1 반환

li = [1, 2, 3, 4, 5]
print(li[0])

결과:
1

 

list[]의 구조

class CallaleObject:
    def __call__(self, *args, **kwargs): 
        print(f'{args}, {kwargs}')
callableObj = CallaleObject()
callableObj(10, 20, 30, 40, 50, userid='apple', age=20, gender='여자')

결과:
(10, 20, 30, 40, 50), {'userid': 'apple', 'age': 20, 'gender': '여자'}

args 일반적인 값을 가변적으로 받는다 **kwargs 특정 키 값 으로 이루어진 값을 받는다.

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

파이썬 모듈  (0) 2024.03.20
파이썬 예외처리  (1) 2024.03.20
파이썬 상속  (0) 2024.03.19
클로저와 데코레이터  (1) 2024.03.19
파이썬 - 객체지향과 클래스  (3) 2024.03.18