본문 바로가기
인공지능/파이썬 기초

스페셜 메서드

by hyunji00pj 2024. 10. 1.

KDT_4기 파이썬 기초 0930(1)

2024.09.30 수업 내용 복습일기 첫번째

 

오늘은 스페셜 메서드에 대해 알아보자

 

1. 스페셜 메서드

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

 

 

1-1. __ repr__()

  • 객체의 상태를 개발자가 쉽게 이해할 수 있도록 반환
  • 재생성할 수 있는 코드를 출력하도록 함
  • 객체의 주요 정보를 담고 있어야 함
class Dog:
  def __init__(self,name,age):
    self.name = name
    self.age = age

  def __repr__(self):
    return f"Dog(name='{self.name}',age={self.age})"
Rucy = Dog('루시',14)
print(repr(Rucy))

print(Rucy)

eval()

파이썬 내장 함수로 문자열로 표현된 파이썬 코드를 실행하고 그 결과를 반환하는 기능

x = 10
y = 3
result = x+y
print(result)
result = eval('x+y')
print(result)

Rucy_repr = repr(Rucy)
Rucy_repr

Rucy_repr = repr(Rucy)
new_Rucy = eval(Rucy_repr) #Dog('루시',14)가 evla함수에 넣으면 실제로 다른 메모리 공간에 객체로 만들어짐
print(new_Rucy)

new_Rucy == Rucy

1-2. __ str__()

  • 객체가 사람이 이해하기 쉽게 표현되도록 문자열로 변환하는 역할
  • __ repr__()와 __ str__()의 차이
    • __ repr__(): 프로그래머에게 유용한 객체의 자세한 표현을 반환
    • __ str__(): 사람이 읽기 쉽게 표현한 객체의 비공식적인 문자열을 반환
  • print()는 항상 __ str__()를 우선 호출함. __ str__()가 없을 때 __ repr__가 호출됨
class Book:
  def __init__(self,title):
    self.title = title
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))

class Book:
  def __init__(self,title):
    self.title = title
  def __str__(self):
    return self.title
book = Book('미친듯이 재밌는 파이썬')
print(book)
print(str(book))

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

1-3. __ add__()

  • 연산자 오버로딩 메서드 '+' 연산이 정의되어 있음
  • '+'연산자를 사용했을 경우 그 동작을 커스터마이즈 하기위해 사용
class Student:
  def __init__(self,name,age):
    self.name = name
    self.age = age

  def __add__(self,other):
    return self.age + other.age #other 다른 객체 의미
kim = Student('김사과',20)
lee = Student('이메론',30)
print(kim + lee)

1-4. __ len__()

  • 객체의 길이(또는 크기)를 반환하는 메서드로 len() 함수가 호출될 때 자동으로 실행
class Queue:
  def __init__(self):
    self.items = [1,2,3,4,5]

  def __len__(self):
    return len(self.items)#머신러닝 딥러닝에 많이 쓰임
li = [1,2,3,4,5]
print(len(li))
print(li)

queue = Queue()
print(queue)
print(len(queue))

1-5.__ 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
pt = Point(5,3)
print(pt)
print(pt[0])
print(pt[1])
print(pt[-100])

class Mylist:
  def __init__(self,data):
    self.data = data
  def __getitem__(self,index):
    return self.data[index]
ml = Mylist([10,20,30,40])
print(ml[0])
print(ml[1])
print(ml[-1])

1-6. __ call__()

  • 클래스의 인스턴스를 함수처럼 호출할 수 있게 만들어주는 메서드
class CallableObject:
  def __call__(self,*args,**kwargs):
    print(f'args:{args},kwargs:{kwargs}')
callable_obj = CallableObject()
callable_obj(1,2,3,a='A',b='B')

'인공지능 > 파이썬 기초' 카테고리의 다른 글

파이썬 모듈  (0) 2024.10.01
파이썬의 예외 처리  (0) 2024.10.01
파이썬의 상속  (0) 2024.10.01
클로저와 데코레이터  (0) 2024.10.01
객체지향과 클래스  (4) 2024.10.01