파이썬

스페셜(매직) 메소드

96__혀누 2024. 3. 20. 00:45

스페셜 메소드

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

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

 


__str__ : 객체를 문자열로 표현하는 메서드. print() 함수나 str() 함수를 사용할 때 호출됩니다.

class Book:
  def __init__(self, title):
    self.title = title

book = Book('미친듯이 재밌는 파이썬')
print(book)

#  문자열로 바꾸는데 사용하던 함수지만, 원래 기존 객체의 이름과 주소를 출력해주는 함수이다.
print(str(book))

>>

<__main__.Book object at 0x7eab39383910>
<__main__.Book object at 0x7eab39383910>
class Book:
  def __init__(self, title):
    self.title = title
  def __str__(self):  # str 메서드 오버라이딩
    return self.title

book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))

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

 

__add__ : + 연산자를 사용할 때 호출되는 메서드

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

  def __add__(self, other): # add 메서드 오버라이딩
    return self.value + other.value

num1 = Calc(5)
num2 = Calc(10)
result = num1 + num2
print(result)

>> 15

 

__len__ : len() 함수를 사용할 때 호출되는 메서드

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 0x7eab39383c10>
5

 

__getitem__ : 인덱싱을 사용할 때 호출되는 메서드

class Point:
  def __init__(self, x, y):
    self.x = x
    self.y = y

  def __getitem__(self, index):  # getitem 메서드 오버라이딩
    if index == 0:
      return self.x
    elif index == 1:
      return self.y
    else:
      return -1

pt = Point(5, 3)
print(pt[0])
print(pt[1])
print(pt[10])     

>>
5
3
-1

 

__call__ : 객체를 함수처럼 호출할 때 사용되는 메서드

class CallableObject:
  def __call__(self, *args, **kwargs):  # call 메서드 오버라이딩
    print(f'{args}, {kwargs}')  
# args : 사용자가 원하는 만큼의 매개변수를 지정할 수 있다. ( args 변수명은 원하는데로 작성해도 되나, 관례적으로 args로 사용한다 )
# kwargs : 사용자가 원하는 만큼의 키워드와 값 매개변수를 지정할 수 있다. ( kwargs 변수명은 원하는데로 작성해도 되나, 관례적으로 args로 사용한다 )

callableObj = CallableObject()
callableObj(10, 20, 30, 40, 50, userid='apple', age=20, gender='여자')

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