본문 바로가기

Python 기초

파이썬 기초(16)-스페셜 메서드

*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*

1. 스페셜 메서드

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

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

매직 메서드의 종류는  6자리로, 다음과 같이 있습니다.

  • __init__ 
  • __str__ 
  • __add__ 
  • __len__ 
  • __getitem__
  • __call__ 

1-1. __init__

객체를 초기화해주는 메서드입니다. class문에서 생성자함수를 사용할 때 주로 사용됩니다. class문을 객체에 넣어서 출력할때, ()안에 매개변수를 넣어서 출력하는데, 이때 생성자.매개변수의 결과값을 출력하게 합니다.

#__init__메서드
class Sell:
    def __init__(self,t):
        self.t=t
se=Sell('제목') # self.t<-'제목' 삽입
print(se)

1-2. __str__

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

#__str__메서드
class Sell:
    def __init__(self,t):
        self.t=t
se=Sell(5) # self<-'제목' 삽입
print(se)
print(str(se))

1-3. __add__

+ 연산자를 호출할 때 사용되는 메서드입니다.

# __add__메서드
class Sell:
    def __init__(self,t):
        self.t=t
    def __add__(self,selt):    #add오버라이딩
        return self.t + selt.t

se1=Sell(3) #t값
se2=Sell(5) #t값
result=se1+se2 #__add__호출->
print(result)

1-4. __len__

len()함수를 사용할 때 호출되는 메서드입니다.

# __len__메서드
class Ad:
    def __init__(self):
        self.weapon=[1,2,3,4,5]

    def __len__(self):
        return (len(self.weapon))

ad=Ad()
print(ad)
print(len(ad))

 

1-5. __getitem__

인덱싱을 사용할  호출되는 메서드입니다.

# __getitem__
class Ap:
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def __getitem__(self,con):
        if con ==0:
            return self.x
        elif con ==1:
            return self.y
        else:
            return -1

ap=Ap(4,2)
print(ap[1])    #인덱스 사용
print(ap[0])
print(ap[5])

1-6. __call__

 객체를 함수처럼 호출  사용되는 메서드입니다. 객체를 선언하면, 함수가 발동하는 형식으로 객체 = 함수 라고 이해해야 합니다.

# __call__
class Co:       # *는 가변형 요소값을 넣을 때 나오는 튜플자료형, 
                # **는 딕셔너리자료형 key값과 value값 형식 지정
    def __call__(self, *args, **kwargs):
        print(f'{args}, {kwargs}')

co=Co()
co(1,2,3,4,5, one='first', two='second', three='third', four='fourth')

참고: *를 붙일 경우 불변형인 튜플자료형 출력, **는 key값과 value값을 가진 딕셔너리 자료형 출력