- 공부한 날짜: 2021.11.26
- 메타클래스: 클래스를 만드는 어떤 것
- Keyword: Class of Class, Type, Meta Class, Custom Meta Class
1. 클래스를 만드는 역할 -> 의도하는 방향으로 클래스를 커스텀
2. 프레임워크 작성 시 필수
3. 동적생성(Type), 커스텀 생성(Type) 함수
4. 커스텀 클래스 -> 검증클래스 등
5. 엄격한 class 사용 요구, 메소드 오버라이드 요구
+python에서는 class가 object로 여겨진다+
Part 01: Type(Class)
- Ex1)
- Obj1 -> SampleA instance
- SampleA -> type meta class
- type -> type meta class
-클래스 특징: 변수에 할당 가능, 복사 가능, 새로운 속성, 함수의 인자로 넘기기 가능
- 인스턴스 클래스 출력
- 모든 클래스의 메타 클래스는 !type클래스!
- Ex2)
- 변수,딕셔너리,클래스 선언, 인스턴스 초기화
Part 02
- Keyword: Type(name,base,dict), Dynamic metaclass
- 메타 클래스 : 메타클래스 동적 생성 중요/ 동작 생성한 메타클래스 -> 커스텀 메타클래스 생성 / 의도하는 방향으로 직접 클래스 생성 에 관여할 수 있는 큰 장점
- Ex #1
- class 동적 생성 방법: type( '클래스명', 'bases(이건 잘 모르겠음), dict(딕셔너리 입력))
- Ex2: type 동적 클래스 생성 +메소드
- 외부에서 메소드 선언해서 동적 클래스 생성에 사용하기
- 동적 클래스 생성시 lambda로 익명함수 생성하기. 위와 동작방식은 동일함
Part 03: MetaClass Inheritance
- Keyword: Type Inheritance, Custom metaclass
- 메타클래스 상속
1. type class 상속
2. metaclass 속성 사용
3. 커스텀 메타 클래스 생성(클래스 생성 가로채기(intercept)/클래스 수정하기(modify)/수정된 클래스 반환)
- Ex1: 커스텀 메타클래스 생성 예제(Type 상속 안함) / 메소드안에 self가 왜 있는지 생각해보기
- 메소드 선언
- Ex2: 커스텀 메타클래스 생성 예제(Type 상속 o)
- 딕셔너리 value에 이전에 생성한 메소드 넣을 수 있다
- __new__ -> __init__ -> __call__ 순서대로 메소드 호출된다
- 클래스 동적으로 생성
- 인스턴스(?) 생성 및 출력: 출력결과 자세히 봐야할 것 같음
- 상속 확인. CustomList2, list, object
Part 04: Descriptor
- Keyword : descriptor, set, get, del, property
- 디스크립터: 클래스의 속성을 객체로 매핑해서 지정된 메소드(get,set,del,,,)로 동작하게 하는 것
1. 객체(class)에서 서로 다른 객체를 속성값으로 가지는 것
2. Read, Write, Delete 등을 미리 정의 가능
3. data descriptor(set,del), non-data descriptor(get)
4. 읽기 전용 객체 생성 장점, 클래스를 의도하는 방향으로 생성 가능
- Ex1 : 기본적인 Descriptor 예제
- 클래스, 인스턴스 생성
- Set,Get,Delete 호출
- Ex2: property 클래스 사용, descriptor 직접 구현/ 메소드 이름 자유롭게 설정할 수 있음
- Class Property(fget=None, fset= None, fdel= None, doc =None)
Part 05: Descriptor
- Keyword: Descriptor vs Property, low level(descriptor) vs high level(property)
- 디스크립터
1. 상황에 맞는 메소드 구현을 통한 객체 지향 프로그래밍 구현
2. property와 달리 reuse(재사용) 가능
3. ORM Framework 사용
- Ex1 : 여기는 이해가 잘 안가서 나중에 다시 공부해야할 것 같다
- Ex2
- 값 출력하면서 함수 확인하기
'Dev Language > Python' 카테고리의 다른 글
[파이썬_4] #2. Multithreading/ Daemon Thread (0) | 2021.12.02 |
---|---|
[파이썬_4] #1. 프로세스(process) vs 스레드(thread) and GIL(Global Interpreter Lock) (0) | 2021.12.02 |
[파이썬_3] #2. Decorator/Underscore/Getter&Setter/Overriding/Overloading/Dispatch (0) | 2021.11.25 |
[파이썬_3] #1. (0) | 2021.11.24 |
[파이썬 중급]#6_1. AsyncIo 멀티스크래핑 실습 (0) | 2021.11.18 |