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
'Python' 카테고리의 다른 글
[전문가를 위한 파이썬] 6장 일급 함수 디자인 패턴 내용 정리 (0) | 2024.06.02 |
---|---|
[전문가를 위한 파이썬] 5장 일급 함수 내용 정리 (0) | 2024.05.29 |
[전문가를 위한 파이썬] 4장 텍스트와 바이트 내용 정리 (0) | 2024.05.19 |
[전문가를 위한 파이썬] 3장 딕셔너리와 집합 내용 정리 (0) | 2024.05.15 |
[전문가를 위한 파이썬] 2장 데이터 구조체 내용 정리 (1) | 2024.05.01 |