• 공부한 날짜: 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

 

 

  • 값 출력하면서 함수 확인하기 

 

+ Recent posts