4-1. Meta Class(1)
3주차 강의는 메타데이터 ( + Descriptor ) 를 다루었다. 정말 극강의 난이도였다..
강사님의 말씀을 분명 들었는데, 그대로 한쪽 귀로 빠져나가서 몇번을 돌려봤는지 모르겠다. 🤯강사님께서도 메타 클래스를 도대체 왜 배우는 것인지 알 수 없었던 때가 있으셨고, 실제로 메타 클래스에 대한 개념을 익히는 시간이 꽤 오래 걸리셨다고 한다.
그런데 이 개념에 대해서 배우고나서 직접 코딩을 하면서 파이썬에 대한 훨씬 깊은 이해를 할 수 있게 되었고, 다른 언어를 배울 때도 이해력이 폭 넓게 증가했다고 한다.
3주차 강의를 마친 나의 생각도 같다!
개념만 익혔을 뿐인데, 이젠 다른 오픈 소스의 코드가 조금은 읽힌다.
매직 메소드도 더 이상 두렵지 않다 🥳
Mata Class
- 오늘의 키워드
- Class of Class
- type function
- meta class
- custom meta class
메타 클래스 대체 왜 쓰는거죠? 🤔
1. 클래스를 만드는 역할을 한다.
내가 의도하는 방향으로 클래스를 커스텀(⭐️)하겠다.
즉, 구현 레벨에 개입이 가능하다.2. 프레임워크 작성 시 필수로 알아두어야 한다.
Spring, Flux, MSA, tensorflow, pytorch, Django 등 많은 오픈소스 프레임워크에서
메타 클래스로 접근해서 코드를 수정하고 있다.
이런 프레임워크를 직접 사용하고, 다른 개발자들과 협업하기 위해선 반드시 메타 클래스를 알아야한다.
메타 클래스 어디에 쓰는거죠? 🤔
1. 커스텀 클래스를 만들어서 우리가 원하는 방향으로 흘러가고 있는지 검증할 수 있게 된다.
2. 엄격한 클래스를 사용 요구할 때 쓰인다.
뼈대를 메타 클래스로 탄탄하게 만들어 놓고, 오픈 소스로 커스터마이즈 하는 방향으로 쓰인다.
Django도 DB와 클래스를 1:1로 매핑하기 때문에 엄격하다.
메타 클래스 어떻게 만드는데요? 🤔
type 함수가 동적 생성과 커스텀 클래스 생성을 가능하게 한다.
type
특정 인스턴스의 자료형을 출력함과 더불어, 메타 클래스를 생성할 수 있다.
class SamlpleA():
pass
obj1 = SamlpleA()
print('ex 1>',obj1.__class__)
# <class '__main__.SamlpleA'>
# obj1의 원형은 sampleA라고 알려준다.
print('ex 1>',type(obj1))
# obj1의 타입 또한 '<class __main__.SamlpleA'> 이다.
type의 역할
type 💬
"너 어디에서 만들어졌어?"
- 인스턴스가 어디에서 만들어졌는지 출력해준다.
class SampleA
로 만들어진 인스턴스 obj1
의 type은 '<class __main__.SamlpleA'>
이다.
⭐️ 그렇다면 class SampleA
는 누구로부터
만들어진걸까?
obj1.__class__
는 SampleA 이므로,
obj1.__class__.__class__
로 알 수 있을 것이다.
print('ex 1>',obj1.__class__.__class__)
# <class 'type'>
띠용? 뜬금없이 type
이 출력되었다.
사실 파이썬에서 모든 클래스의 메타 클래스는
type
이다.
type이 모든 클래스의 원형 인 것이다. 😮
type의 type
⭐️ 그렇다면 type은 누구로부터 만들어졌을까?
print('ex 1>',obj1.__class__.__class__)
# ex 1> <class 'type'>
print('ex 1>',type(obj1).__class__)
# ex 1> <class 'type'>
print('ex 1>',type.__class__)
# ex 1> <class 'type'>
놀랍게도 type은 자기 자신이 메타다.
이미 파이썬 언어 자체에 정의된 내용이기 때문에, type에 대한 메타는 개입할 수가 없다!
그렇지만 다른 객체의 메타 클래스는 언제든 개입 가능하므로 내 입맛대로 커스텀 해보자~!
핵심 정리 ⭐️
obj1
=SampleA's instance
SampleA
=type meta class
type
=type meta class
- 모든 클래스의 메타는 type이다.
- type은 자기자신이 메타이다.
그래서 type에 대한 메타는 개입할 수 없다.
[출처]
인프런 - 모두를 위한 파이썬 : 필수 문법 배우기 Feat. 오픈소스 패키지 배포 (Inflearn Original)
Author And Source
이 문제에 관하여(4-1. Meta Class(1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@uoayop/4-1.-Meta-Class1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)