[#10 파이썬 기초] 객체와 클래스1 이어서 합니다!
모든것이 단순히 값이나,
하나의 정보가 아닌 객체로 취급하는 파이썬
객체는 어떠한 속성값과 행동을 가지고 있는 데이터입니다. (예시 자동차)
4. 자신 : self
- self 인수를 사용하는 이유?
: 적절한 객체의 속성과 메서드를 찾기 위해 사용한다.
a_car=Car()
a_car.exclaim()
# a_car 객체의 Car 클래스를 찾는다.
# a_car 객체를 Car 클래스의 exclaim() 메서드의 self 매개변수에 전달한다.
5. 속성 접근
- 파이썬은 객체 속성과 메서드가 공개되어 있어서 개발자가 스스로 잘 관리를 해야 한다.
1. 직접 접근
속성 값을 직접 가져와서 변경하는 방식은,
값이 언제든지 변경될 수 있다.
2. Getter/Setter 메서드
- 외부로부터 바로 접근할 수 없는 private 객체 속성을 지원하는데 private 속성의 값을 읽고 쓰기 위해 getter/setter 메서드를 사용한다.
- 파이썬에는 private 속성이 없지만 getter/setter 메서드로 조금의 프라이버시를 얻을 수 있다.
3. 속성 접근을 위한 프로퍼티
=> getter/setter 보다 더 좋은 방식
=> 속성 프라이버시를 위한 파이써닉한 방식이다.
1) name=property(get_name,set_name) 구문을 클래스 정의 마지막 줄에 정의한다.
2) 데커레이터 추가하고 두 메서드 이름을 name으로 변경
getter 메서드 앞에 @property 추가
setter 메서드 앞에 @name.setter 데커레이터 추가
= > 객체에 저장된 속성을 참조하기 위해 name 프로퍼티를 사용
4. 계산된 값의 프로퍼티
- 프로퍼티는 계산된 값을 참조할 수도 있다.
-
속성에 대한 setter 프로퍼티를 명시하지 않는다면, 외부로부터 이 속성을 설정할 수 없다.
프로퍼티로 접근하면 이점이 있다.(직접 접근을 하는 것 보다)
=> 속성의 정의만 바꾼다면 모든 호출자를 수정할 필요가 없이 클래스 정의에 있는 코드만 수정하면 된다.
5. 프라이버시를 위한 네임 맹글링
- 파이썬은 클래스 정의 외부에서 볼 수 없도록 하는 속성에 대한 네이밍 컨벤션이 있다.
속성 이름 앞에 __(언더바를 두개 붙이면 된다.)
네임 맹글링은 속성의 의도적인 직접 접근을 어렵게 만든다.
6. 클래스와 객체 속성
- 클래스에 속성 할당이 가능하고 해당 속성은 자식 객체로 상속됌
- 자식 객체의 속성을 변경해도 클래스 속성에 영향 x
- 나중에 클래스 속성 변경해도 기존 자식 객체에는 영향 x
6. 메서드 타입
- 인스턴스 메서드 : 앞에 데커레이터가 없다. 첫 번째 인수는 객체 자신을 참조하는 self다
- 클래스 메서드 : @clasasmethod 데커레이터가 있다. 첫 번째 인수는 cls이고 클래스 자체를 참조한다.
- 정적 메서드 : @staticmethod 데커레이터가 있다. 첫 번째 인수는 자신의 객체나 클래스가 아니다.
1. 인스턴스 메서드
- 일반적인 클래스를 생성할 때의 메서드 타입이다.
2. 클래스 메서드
- 클래스 전체에 영향을 미친다.
3. 정적 메서드
- 클래스나 객체에 영향 x, 단지 편의를 위해 존재함.
7. 덕 타이핑
- 파이썬은 다향성을 느슨하게 구현했다.
(클래스에 상관 없이 같은 동작을 다른 객체에 적용할 수 있다는 말이다.)
8. 매직 메서드
- 비교 연산을 위한 매직 메서드
__eq__(self,other) === 271p 참고
9. 애그리게이션과 콤퍼지션
- 애그리게이션은 관계를 표현하긴 하지만 좀 더 느슨하다.
10. 객체는 언제 사용할까?
- 딕셔너리, 리스트, 튜플은 모듈보다 더 작고 간단하며 빠르다. 일반적으로 모듈은 클래스보다 더 간단하다.
- 객체보단 튜플이 더 낫고, getter/setter함수보단 간단한 필드가 더 낫다.
11. 네임드 튜플
- 네임드 튜플은 튜플의 서브클래스이다. 이름(.name)과 위치([offset])로 값에 접근할 수 있다.
duck 클래스를 네임드 튜플로, bill과 tail을 간단한 문자열 속성으로 변환한다.
**parts는 키워드 인수이다.
parts 딕셔너리에서 키와 값을 추출해서 Duck()의 인수로 제공한다.
- 네임드 튜플은 불변이다. 그러나 필드를 바꿔서 또 다른 네임드 튜플을 반환할 수 있따.
※ 네임드 튜플 특징 ※
1. 불변 객체처럼 행동함
2. 객체보다 공간 효율성과 시간 효율성이 더 좋다
3. 딕셔너리 형식의 대괄호 대신 온점 표기법으로 속성 접근 가능
4.; 네임드 튜플을 딕셔너리의 키처럼 사용 가능
12. 데이터 클래스
많은 개발자들은 메서드가 아니라 주로 데이터(속성)을 저장하기 위해 객체 생성하는 것을 선호한다.
-> 다음에 다시 공부하기 277p
13. attrs
279P
참고 문헌
: 처음 시작하는 파이썬
'여니의 프로그래밍 study > 파이썬' 카테고리의 다른 글
[#11장] 모듈과 패키지 (0) | 2021.01.09 |
---|---|
[#10장 연습문제] 처음 시작하는 파이썬 10장 연습문제 (0) | 2021.01.08 |
[#10 파이썬 기초] 객체와 클래스1 (0) | 2021.01.08 |
[#9장 연습 문제] 처음 시작하는 파이썬 9장 풀어보기 (0) | 2021.01.06 |
[#9 파이썬 기초] 함수 정의하기 (2) | 2021.01.06 |