특수한 메소드들 정리

한승수·2024년 12월 15일

AI 코딩 팁

목록 보기
3/11
post-thumbnail

파이썬을 통해 다양한 클래스들을 생성하고 구현된 코드들을 보다보면 클래스마다 __에 의해 감싸진 특수한 메소드들을 많이 볼 수 있습니다. 이 때 각 메소드들이 어떤 함수인지 알고 코드를 보면 클래스에 구현된 함수들을 이해하거나 동작 방식을 이해할 때 도움이 될 것 같아 지금까지 AI 모델들의 코드들을 구현하며 많이 마주쳤던 특수한 메소드들을 정리해봅니다.
(사실 아주 기초적이지만 따로 찾아볼 생각은 안했어서 지금이라도 정리해봅니다..)

1. __init__

요약: 클래스를 처음 호출할 때 자동으로 실행되는 메소드

  • 특히 클래스를 통해 인스턴스를 생성할 때 입력받을 인자와, 해당 인스턴스의 속성을 지정하는데 중요한 역할을 한다.

예시

class Test:
    def __init__(self,title):
        self.title=title
  • Test 클래스의 인스턴스를 생성할 때 인자로 title을 입력해주어야 하고, 입력된 title은 인스턴스가 생성됨가 동시에 self.title에 저장된다.

실행 결과

T = Test("Happy New Year")
T.title #T를 지정할 때 넣은 title 인자에 맞게 지정되어 있음
>>> Happy New Year

2. __call__

요약: 클래스를 함수처럼 쓸 수 있게 만들어주는 메소드

  • __call__ 을 이용하면 따로 동작을 위한 메소드를 만들지 않고 클래스의 인스턴스를 함수처럼 호출 할 수 있게 해줍니다.

예시

class Test1:
    def square(self,x):
        return x**2

class Test2:
    def __call__(self,x):
        return x**2
  • Test1 클래스는 __call__을 사용하지 않고 square이라는 메소드를 새로 생성해서 제곱을 반환합니다.
  • Test2 클래스는 __call__을 사용해 메소드를 추가로 생성하지 않고 제곱을 수행합니다.

두 클래스에 대한 실행 결과는 아래와 같습니다.

T = Test1()
T.square(5)
>>> 25

T = Test2()
T(5) #추가적인 메소드를 쓰지 않고도 인스턴스를 함수처럼 사용 가능
>>> 25
  • Test1에 비해 Test2가 원하는 결과를 얻기에 추가의 메소드를 사용하지 않고 훨씬 편하게 클래스 인스턴스 만드로 함수처럼 사용할 수 있습니다.

3. __repr__

요약: 문자열을 ‘return’하는 메소드

  • __repr__에 어떤 문자열을 반환할지 지정하면 print(클래스)를 통해 해당 문자열이 프린트 된다.

예시

class Test:
    def __init__(self):
        self.title="Happy New Year"
        
    def __repr__(self):
        return self.title
  • self.title 에 문자열을 지정하고 __repr__ 을 통해 반환한다.

실행결과

T = Test()
print(T.title)
>>> Happy New Year
print(T) #T.title과 같은 결과
>>> Happy New Year
  • T.title__init__함수에 의해 지정되어 “Happy New Year”를 반환하고, T는 __repr__에 의해 T.title과 동일한 결과를 반환하게 된다.

4. 데이터셋에서 사용되는 특수 메소드

  • __len__: 데이터셋의 길이를 반환합니다.
  • __getitem__: index 값을 입력으로 받으며, 데이터셋에서 해당 index에 해당하는 값을 반환한다.
  • __setitem__: index값과 지정할 데이터를 입력으로 받으며, 데이터셋에서 해당 index에 해당하는 값을 지정한 데이터로 변환한다.
  • __delitem__: index값을 입력으로 받으며, 데이터셋에서 해당 index에 해당하는 값을 제거한다.

예시

len(x)      x.__len__()
x[a]        x.__getitem__(a)
x[a] = v    x.__setitem__(a,v)
del x[a]    x.__delitem__(a)

5. 어트리뷰트(Attribute)와 관련된 함수들

이 함수들은 클래스에 지정하는 것이 아닌, 클래스의 어트리뷰트(Attribute)들을 관리하는 함수이다. 파이썬에 기본적으로 내장되어 있으며 다양한 코드 구현에서 활용되어 정리한다.

  • getattr(obj,"name") : obj.name를 반환
  • hasattr(obj,"name"): obj.name이 있는지 확인
  • delattr(obj,"name"): obj.name을 삭제
  • setattr(obj,"name",value): obj.name을 value로 변환

실행 결과

getattr(T,'title') #T.title 확인
>>> 'Happy New Year'

hasattr(T,'title') #T.title 유무 확인
>>> True

setattr(T,'title',"Merry Christmas") #T.title 변환
getattr(T,'title')
>>> "Merry Christmas"

delattr(T,"title") #T.title 제거
hasattr(T,'title')
>>> False

Conclusion

간단하지만 쉽게 보고 지나쳤던 메소드들이지만 이렇게 정리해보고 나니 앞으로 코드를 구현하거나 읽을 때 좀 더 편하게 쓸 수 있을 것 같습니다. 많은 참고가 되셨으면 좋겠습니다.

profile
Grooovy._.Han

0개의 댓글