인스턴스/클래스/정적 메서드
인스턴스 메서드
- 클래스 정의 내의 함수들은 기본적으로 인스턴스 메서드
- 생성된 객체를 통해 호출이 되며, 첫 번째 매개변수는 self이며 여기에 객체의 인스턴스가 전달
클래스 메서드
- 클래스 메서드는 클래스 자체를 객체로 보고 클래스에 대해 작동하는 메서드
- 인스턴스 메서드와 달리 첫 번째 매개변수의 이름을 관례적으로 cls라는 이름을 사용하며, 여기에 클래스가 전달
- @classmethod 데코레이터를 사용
- 클래스 메서드는 상속에서 의미가 있기 때문에 상속에 대한 강의 후 예제를 통해 설명
정적 메서드
- 클래스에 의해 정의되는 네임스페이스에 들어 있는 함수
- 정적 메서드는 객체 인스턴스에 의해 호출되지 않고, 클래스에 의해 호출되기 때문에 첫 번째 매개변수로 self가 없음
- @staticmethod 데코레이터를 사용
특수 메서드와 연산자 오버로딩
객체의 작동 방식
- 파이썬의 객체들은 구현 기능에 따라 분류
- 각 데이터 타입의 작동 방식은 해당 타입이 구현하고 있는 특수 메서드들의 집합에 따라 결정
- 특수 메서드들을 구현하여 객체의 작동방식을 변경할 수 있음
연산자 오버로딩
- 같은 이름(연산자)으로 다양한 타입의 객체가 연산이 되도록 구현하는 것
- 1+2, 3.14 + 5, 'abc' + 'def'
- 문자열, 리스트, 튜플 같은 순서열 타입 s는 s[n], len(s), v in s와 같은 연산이 가능
- 파이썬은 특수 메서드들을 오버로딩 하는 방식으로 연산자 오버로딩을 구현
- x+y는 x의 내부 메서드인 x.__add__(y)에 대응
- x[k]는 x.__getitem__(k)에 대응
객체 생성 및 파괴를 위한 특수 메서드
메서드 | 설명 |
__new__(cls [ , *args [ , **kwargs]]) | 새 인스턴스를 생성하기 위해 호출되는 클래스 메서드 |
__init__(self [ , *args [ ,**kwargs]]) | 새 인스턴스를 초기화하기 위해 호출 |
--del__(self) | 인스턴스가 파괴될 때 호출 |
객체의 문자열 표현
메서드 | 설명 |
__format__(self, format_spec) | 포멧이 적용된 표현을 생성 |
__repr__(self) | 객체의 문자열 표현을 생성 |
__str__(self) | 객체의 간단한 문자열 표현을 생성 |
다양한 특수 메소드는 다음 링크를 참고
private 네임 맹글링
파이썬에서는 완전하지 않지만 외부에서 사용자가 직접 접근할 수 없도록 속성이나 메서드 이름 앞에 두 개의 언더스코어(__)를 붙여 이름을 지을 수 있다.
- __<name> 형태의 속성이나 메서드는 객체를 사용하는 외부에서 객체의 해당 이름으로 직접 접근할 수 없어 이름을 사용자로부터 감추는 기능을 하게 됨
아래 정리 잘된 친절한 블로그에서 내용을 보충
https://tibetsandfox.tistory.com/21
getter, setter, 프로퍼티
- 객체지향언어에서는 외부로부터 바로 접근할 수 없는 private 객체 속성을 지원하며, 프로그래머는 private 속성 값을 읽고 쓰기 위해 getter메서드나 setter메서드를 사용함
- 파이썬에서도 getter, setter메서드를 구현할 수 있지만, 프로퍼티를 더 사용한다.
- getter의 경우 @property 데코레이터 사용
- setter의 경우 @<property 데코레이터가 붙은 메서드명>.setter 데코레이터 사용
아래 정리글을 참고
https://dojang.io/mod/page/view.php?id=2476
'Language > Python' 카테고리의 다른 글
야구게임 - 파이썬 (0) | 2022.03.04 |
---|---|
[Python] Ch7 - part1. 클래스 (0) | 2021.07.01 |
[Python] Ch6 - part 3. 라이브러리 (0) | 2021.06.29 |
[Python] Ch6 - part 2. 패키지 (0) | 2021.04.24 |
[Python] Ch6 - part1. 모듈 (0) | 2021.04.24 |