Special Methods in Python
1 minute read

Method란?


Special Methods

  1. __init__ method (초기화)
    • 어떤 클래스의 객체가 만들어질 때 자동으로 호출되어서 그 객체가 갖게 되는 여러가지 성질을 정해준다.
    • 객체를 만들면 자동으로 실행!
    • 초기화 메소드와 같은 것을 다른 객체지향 언어에서는 생성자(constructor)라고도 한다.
  2. __del__ method (소멸자; destructor)
    • 객체가 없어질 때 호출되는 메소드
  3. __repr__ method (프린팅)
    • print("객체")를 실행하면 여기서 return하도록 한 값이 출력된다.
  4. __str__ method
    • instance 자체를 출력할 때 형식을 지정해준다.
  5. __add__ method (덧셈)
    • 덧셈 연산자 ‘+’가 하는 일을 정의하는 부분
  6. __cmp__ method (비교)
    • 두 객체를 비교하는 비교 연산자(<, >, ==)를 쓸 수 있게 정의하는 부분

__str____repr__의 차이

__repr__ 메소드는 다음과 같이 정의된다.

  def __repr__(self):
      return '<{0}.{1} object at {2}>'.format(
      self.__module__, type(self).__name__, hex(id(self)))

__repr__ 메소드는 객체가 존재하는 모듈, 클래스 이름, 메모리 위치를 16진수로 표시하는 역할을 한다.

아래의 예시를 보면 차이를 좀 더 쉽게 이해할 수 있다. s라는 변수에 할당된 문자열을 두 함수에 각각 넣어보자.

s = """w'o"w"""

이때 reprstr은 똑같이 출력을 하는 메소드임에도 불구하고 서로 다른 값을 반환한다.

str(s) # -> 'w\'o"w'
repr(s) # -> '\'w\\\'o"w\''

참고 : eval()

eval()문자열로 표현된 파이썬 표현식을 입력받아 그 문자열을 실행시키고 결과값을 반환하는 함수이다.

a = 2
print(eval("a+3")) # -> 정수형 5를 반환한다.

이렇게 eval()은 입력받은 문자열이 파이썬 문법에만 맞으면, 그에 해당하는 표현식을 실행시킨다.

이때 위험한 점은 문자열 내의 표현식에 에러가 있다면, 에러도 실시간으로 처리되어버린다는 것이다. 이러한 이유에서 eval()을 사용하는 것은 좋지 못한 습관이라고 한다.

eval()을 쓰면 안되는 이유 :link:

  1. 대부분의 경우 더 좋은 방식의 대안이 있다.
  2. 매우 위험하고 안전하지 못하다.
  3. 디버깅을 어렵게 만든다.
  4. 느리다.

Recent Posts

Matrix Calculus
Inverted Indexing
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Deep Contextualized Word Representations
Pretraining-Based Natural Language Generation for Text Summarization