SlideShare une entreprise Scribd logo
1  sur  41
PYTHON
CLASS 생성
이해하기
Moon Yong Joon
CLASS 생성하기
Meta Class3
메타클래스란
파이썬에서는 모든 클래스는 메타클래스에 의해 만
들어진다. 내장 메타클래스는 type이 제공되면 이
를 상속받아 새로운 메타클래스를 만들 수 있음
4
인스턴스 클래스 메타클래스
Instance of Instance of
파이썬 클래스 생성 구조
파이썬에서 모든 클래스는 object class를 상속
하며 모든 class는 type class에 의해 만들어진
object
class
내장/사용자
class
type
class상속
생성
생성
5
type 호출6
type 메타클래스 정의
type 메타클래스로 클래스를 생성하려면 문자열로
클래스명을 정의하고, 상속관계를 tuple,
namespace에 dict 타입으로 선언
7
type(‘클래스명’,상속관계,namespace)
<class '__main__.MyKlass1'> {'__module__': '__main__', '__dict__': <attribute
'__dict__' of 'MyKlass1' objects>, '__doc__': None, '__weakref__': <attribute
'__weakref__' of 'MyKlass1' objects>}
Type: 사용자 정의 class 생성
type으로 사용자 클래스를 정의하고 인스턴스를
생성해서 사용할 수 있음
8
type 메타클래스 결정
type 메타클래스로 클래스 정의 만들기
9
type 메타클래스 결정 : 결과
type 메타클래스로 클래스 정의하고 실행 결과
10
['Camembert']
{'x': 42, '__module__': '__main__', '__doc__': None,
'howdy': <function howdy at
0x00000000055BB9D8>, '__dict__': <attribute
'__dict__' of 'MyList' objects>, '__weakref__':
<attribute '__weakref__' of 'MyList' objects>}
42
Howdy, John
<class '__main__.MyList'>
<class 'type'>
type : __new__/__init__11
type __new__/__init__
type 메타클래스 생성은 __new__로 하고 __init__
으로 초기화 처리
12
type __new__/__init__
type 메타클래스로 클래스를 생성하려면 문자열로
클래스명을 정의하고, 상속관계를 tuple,
namespace에 dict 타입으로 선언 __init__ 첫번째
인자는 class가 와야 함
13
MyKlass = type.__new__(type, name, bases, dict)
type.__init__(MyKlass, name, bases, dict)
<class '__main__.MyKlass'> {'__module__': '__main__', '__dict__': <attribute
'__dict__' of 'MyKlass' objects>, '__doc__': None, '__weakref__': <attribute
'__weakref__' of 'MyKlass' objects>}
type : __call__14
type __call__
type 메타클래스로 클래스를 생성하려면 문자열로
클래스명을 정의하고, 상속관계를 tuple,
namespace에 dict 타입으로 선언 __init__ 첫번째
인자는 class가 와야 함
15
MyKlass = type.__call__(type, name, bases, dict)
<class '__main__.MyKlass'>
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'MyKlass' objects>,
'__doc__': None, '__weakref__': <attribute '__weakref__' of 'MyKlass' objects>}
사용자 정의
META CLASS로
CLASS 생성하기
meta class :new/init17
사용자 메타클래스 결정
사용자 메타클래스로 클래스 정의 만들기
18
클래스 생성
사용자 metaclass를 이용해서 생성
19
meta class 생성:__call__20
class 생성
메타 클래스에 __call__로 호출하면 내부의
__new__, __init__을 호출 해서 새로운 클래스가 생
성
21
type
class
사용자 메타클래스 :__call__ 1
사용자 메타클래스로 클래스를 __call__ 메소드에
정의해서 만들기
22
사용자 메타클래스 :__call__ 2
사용자 메타클래스로 클래스를 __call__ 메소드에
정의해서 만들기
23
인스턴스 생성하기
메타클래스 이용25
instance 생성
인스턴스 생성도 메타 클래스가 class 내부
__new__, __init__을 호출 해서 처리
26
type.__call__
type.__call__메소드를 이용해서 클래스명과 클래
스 인자를 넣으면 인스턴스가 생성 됨
27
type.__call__ 호출 차이
type.__call__메소드를 호출해서 인자를 넣는 부분
을 확인해야 함
28
클래스
생성
인스턴스
생성
사용자 정의 class 이용29
클래스.__new__/__init__
class A의 __new__, __init__ 메소드를 이용해서 인
스턴스를 생성하기
30
클래스 호출
class A를 호출하면 자동으로 __new__, __init__ 메
소드를 이용해서 인스턴스를 생성하기
31
사용자 정의
META CLASS
Moon Yong Joon
32
메타클래스 정의33
메타 클래스 처리 흐름
type이라는 meta-metaclass로 metaclass 생성
34
type에서 namespace
Once the appropriate metaclass has been
identified, then the class namespace is
prepared.
35
__prepare__(‘클래스명’,상속관계)
type에서 namespace 처리예시
type 클래스 내의 __prepare__ 메소드를 이용해서
namespace를 결과로 받음
36
Metaclass 정의 namespace
사용자 정의 metaclass를 사용할 경우는 별도의
namespace 처리가 필요 classmethod이므로 꼭
명기해야 함
37
namespace = metaclass.__prepare__(name, bases, **kwds)
메타클래스 실행38
메타 클래스 정의
type을 상속받는 Meta라는 클래스를 생성
type.__new__ 메소드를 통해 새로운 클래스 생성
39
사용자 클래스 정의
Meta를 metaclass에 할당하고 A라는 클래스 정의
40
사용자 클래스 정의 : 실행 결과
클래스 A의 타입은 Meta가 되고 A의 namespace
는 A클래스 내부와 메타클래스에서 정의한 것들로
구성됨
41
the appropriate metaclass is determined ==>
<class '__main__.Meta'>
the class namespace is prepared ===>
{'__init__': <function A.__init__ at 0x00000000055BB158>, '__doc__': None, 'four':
<function A.four at 0x00000000050A3D90>, '__dict__': <attribute '__dict__' of 'A'
objects>, ' abc': 'abc', 'two': <function A.two at 0x00000000055BB0D0>, '__weakref__':
<attribute '__weakref__' of 'A' objects>, '__module__': '__main__', 'three': <function
A.three at 0x00000000055BBD08>, 'one': <function A.one at 0x00000000055BB048>}

Contenu connexe

Tendances

파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기Yong Joon Moon
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편Yong Joon Moon
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311Yong Joon Moon
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색Yong Joon Moon
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법Yong Joon Moon
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기Yong Joon Moon
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기Yong Joon Moon
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
 

Tendances (20)

파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Reflect package 사용하기
Reflect package 사용하기Reflect package 사용하기
Reflect package 사용하기
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 

En vedette

Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815Yong Joon Moon
 
확률 통계 (파이썬)
확률 통계 (파이썬)확률 통계 (파이썬)
확률 통계 (파이썬)Yong Joon Moon
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Yong Joon Moon
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기Yong Joon Moon
 
게임의 정의
게임의 정의게임의 정의
게임의 정의귀희 김
 
Bmg lecture note 20111102
Bmg lecture note 20111102Bmg lecture note 20111102
Bmg lecture note 20111102Yeounjoon Kim
 
SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로
SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로
SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로uEngine Solutions
 
Policy based Class Design
Policy based Class DesignPolicy based Class Design
Policy based Class Designlactrious
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210Yong Joon Moon
 
파이썬 Datetime 이해하기
파이썬 Datetime 이해하기파이썬 Datetime 이해하기
파이썬 Datetime 이해하기Yong Joon Moon
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301Yong Joon Moon
 
디자인의 정의
디자인의 정의디자인의 정의
디자인의 정의Sohee Kim
 

En vedette (14)

Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
확률 통계 (파이썬)
확률 통계 (파이썬)확률 통계 (파이썬)
확률 통계 (파이썬)
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 
게임의 정의
게임의 정의게임의 정의
게임의 정의
 
Bmg lecture note 20111102
Bmg lecture note 20111102Bmg lecture note 20111102
Bmg lecture note 20111102
 
SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로
SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로
SNS 를 통한 비즈니스 프로세스 실행 방안 - 프로세스 코디를 기반으로
 
Policy based Class Design
Policy based Class DesignPolicy based Class Design
Policy based Class Design
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
파이썬 Datetime 이해하기
파이썬 Datetime 이해하기파이썬 Datetime 이해하기
파이썬 Datetime 이해하기
 
파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301파이썬+정규표현식+이해하기 20160301
파이썬+정규표현식+이해하기 20160301
 
디자인의 정의
디자인의 정의디자인의 정의
디자인의 정의
 

Plus de Yong Joon Moon

Scala companion object
Scala companion objectScala companion object
Scala companion objectYong Joon Moon
 
Scala block expression
Scala block expressionScala block expression
Scala block expressionYong Joon Moon
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritanceYong Joon Moon
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic functionYong Joon Moon
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understandingYong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편Yong Joon Moon
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편Yong Joon Moon
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편Yong Joon Moon
 

Plus de Yong Joon Moon (20)

rust ownership
rust ownership rust ownership
rust ownership
 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scope
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
 
Scala block expression
Scala block expressionScala block expression
Scala block expression
 
Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
 
Scala variable
Scala variableScala variable
Scala variable
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
Scala implicit
Scala implicitScala implicit
Scala implicit
 
Scala type args
Scala type argsScala type args
Scala type args
 
Scala trait usage
Scala trait usageScala trait usage
Scala trait usage
 
Scala nested function generic function
Scala nested function generic functionScala nested function generic function
Scala nested function generic function
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
 
Scala syntax function
Scala syntax functionScala syntax function
Scala syntax function
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Python+numpy pandas 3편
Python+numpy pandas 3편Python+numpy pandas 3편
Python+numpy pandas 3편
 
Python+numpy pandas 2편
Python+numpy pandas 2편Python+numpy pandas 2편
Python+numpy pandas 2편
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 

파이썬 class 및 인스턴스 생성 이해하기