도비LOG(跳飛錄)

도비의 AI 엔지니어 도전기

Python

[전문가를 위한 파이썬] 1장 내용 정리

나쁜도비 2024. 5. 1. 14:54

1장 파이썬 데이터 모델

1.1. 파이썬 카드 한 벌

  • 특별 메서드로 파이썬 데이터 모델을 사용할 때의 장점
    • 사용자가 표준 연산을 수행하기 위해 클래스 자체에서 구현한 임의 메서드명을 암기할 필요가 없다.
    • 파이썬 표준 라이브러리에서 제공하는 풍부한 기능을 구현할 필요 없이 바로 사용할 수 있다.

1.2. 특별 메서드는 어떻게 사용되나?

  • 예를 들어 우리는 특별메서드를 my_object.__len__()으로 직접 호출하지 않고, len(my_object) 형태로 호출한다.
  • 종종 특별 메서드가 암묵적으로 호출된다. 예를 들어, for문의 경우 실제로는 iter(x) 를 호출하며, 이 함수는 다시 x.__iter__() 를 호출한다.

1.2.1. 수치형 흉내내기

  • __repr__(), __abs__(), __add()__, __mul__() 특별 메서드를 이용해서 벡터 연산을 구현한 클래스
  • class Vector: def __init__(self, x=0, y=0): self.x = x self.y = y def __repr__(self): return 'Vector(%r, %r)' % (self.x, self.y) def __abs__(self): return hypot(self.x, self.y) def __bool__(self): return bool(abs(self)) def __add__(self, other): x = self.x + other.x y = self.y + other.y return Vector(x, y) def __mul__(self, scalar): return Vector(self.x * scalar, self.y * scalar)

1.2.2. 문자열 표현

  • _repr__()__str__() 의 비교: __str__() 메서드는 str() 생성자에 의해 호출되며, print() 함수에 의해 암묵적으로 사용됨. 파이썬 인터프리터는 __str__() 메서드가 구현되어 있지 않을 때 __repr__() 메서드를 호출하기 때문에, 이 두 특별 메서드 중 하나를 구현해야 한다면 __repr__() 권장

1.2.3. 산술 연산자

  • __add__() , __mul__() 은 각각 +* 연산자를 구현한다.

1.2.4. 사용자 정의형의 불리언 값

  • Ture 혹은 False 반환
  • __bool__() 이 구현되어 있지 않으면 파이썬은 x.__len__() 호출
  • 위 구현의 __bool__() 은 벡터의 크기가 0이면 False, 그렇지 않으면 True 반환

1.3. 특별 메서드 개요

  • 책 참고

1.4. 왜 len()은 메서드가 아닐까?

  • len()은 abs()와 마찬가지로 파이썬 데이터 모델에서 실용성의 이유로 메서드라고 부르지 않는다. 그러나 __len__() 특별 메서드 덕분에 len() 메서드를 직접 정의할 수 있다.

1.5. 요약

  • 특별 메서드를 구현하면 사용자 정의 객체도 내장형 객체처럼 작동하게 되어, 파이썬스러운 표현력 있는 코딩 스타일을 구사할 수 있다.
  • 파이썬 객체는 기본적으로 자신을 문자열 형태로 제공해야 하는데, 디버깅 및 로그에 사용하는 형태와 사용자에게 보여주기 위한 형태가 있다. 그렇기 때문에 __repr__()__str__() 특별 메서드가 있는 것이다.
728x90