SlideShare a Scribd company logo
1 of 63
PYTHON
객체란?
Moon Yong Joon
메타클래스
Moon Yong Joon
메타 클래스 이해
파이썬 객체 만드는 법
파이썬에서는 메타클래스에서 클래스를 만들고
이 클래스에서 인스턴스를 만듬
type 메타클래스
type 메타클래스는 2가지 일을 한다. 객체를 넣
으면 그 객체가 어느 클래스에 의해 만들어졌는지
를 표시하거나 새로운 클래스를 만들때 사용
class로만 생성6
Class 문이 하는 일
Class 문으로 생성하는 클래스와 메타클래스로
생성하는 클래스는 동일한 일을 수행
type 메타클래스 결정
type 메타클래스로 클래스 정의 만들기
8
type 메타클래스 결정 : 결과
type 메타클래스로 클래스 정의하고 실행 결과
9
['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'>
타입 체크10
Type Class
문자열과 정수 타입 클래스가 type 클래스로 만들
어지므로 이에 대한 체크
11
Object Class
Object Class 에 대한 class와 instance에 대한 타
입 체크
12
사용자
메타클래스
Moon Yong Joon
사용자 메타클래스
메타클래스 : __call__
Meta 클래스는 실제 내부적으로 작동되므로 인스
턴스가 생성될 때 __call__을 호출해서 사전으로
클래스를 만듦
함수를 이용해서 클래스 만들기
Type 메타클래스를 함수의 리턴값으로 해서 실제
클래스 객체를 만들기
사용자 메타 클래스 만들기
Meta 클래스에서 type을 상속받아서 새로 만드
는 클래스의 metaclass=Meta로 선언하면 실제
클래스도 Meta에 의해 만들어지는 구조로 설정됨
사용자 메타를
만들어서 클래스
생성
파이썬
기준이해
Moon Yong Joon
Class에서 인스턴스 만들기
class 내의 생성자 처리 방식
Class명(인자)를 호출하면 __call__이 호출되면서
__new__와 __init__을 차례대로 호출해서 인스턴
스를 처리
모든 것은 객체
파이썬에서는 클래스도 객체이고 인스턴스도 객
체이다
Class object instance object
int 클래스 1 인스턴스int.__call__(1)
int(1)
인스턴스 생성
함수도 객체
파이썬에서는 클래스도 객체이고 인스턴스도 객
체이다
def 함수명 (함수 파라미터) :
함수 로직
함수결과처리
(return/yield)
object
function code
인스턴스
객체 생성
Class와 인스턴스 관리 기준
멤버 호출 시 bubbling 검색
인스턴스에 없는 멤버는 bubbling으로 상위를 검
색하고 검색된 결과를 실행한다
__dict__
class A
__dict__
instance A
__dict__
class object
검색 검색
Class와 instance 관리영역 분리
인스턴스에 없는 멤버는 bubbling으로 상위를 검
색하고 검색된 결과를 실행한다
변수 사용 이유
변수는 객체 참조만 관리
파이썬에서는 변수는 객체의 참조만 관리하는 구
조
변수 instance object
p 1 인스턴스
p = 1
객체 주소 할당
instance object
“abc” 인스턴스
p = “abc”
변수p는 타입과 무
관하게 객체 주소만
저장
X
O
변수는 항상 할당 필요
파이썬에서는 변수는 객체의 참조만 관리하는 구
조이므로 초기할당이 되어 있어야 함
런타임 추가/삭제
클래스 메소드 : 런타입 추가
클래스 객체의 namespace가 공개되어 있어 별
도의 함수를 정의한 후에 classmethod로 등록해
서 처리 가능
클래스 변수
파이썬 클래스 객체에 변수를 지정하면
namespace에 변수명과 초기화된 값이 들어가
있어 항상 사용이 가능
인스턴스 메소드 : 런타임
파이썬 인스턴스 메소드에 대한 추가
객체의 멤버는 언제라도 삭제
파이썬 클래스 내부 멤버인 __init__을 삭제하면
실제 삭제됨
구조이해
Moon Yong Joon
Class 구조
Class Notation
파이썬 언어에서 객체를 만드는 타입을 Class를
정의하여 사용
클래스 명
변수
메소드
class 클래스이름[(상속 클래스명)]:
<클래스 변수 1>
<클래스 변수 2>
...
def 인스턴스 메소드(self[, 인수1, 인수2,,,]):
<수행할 문장 1>
<수행할 문장 2>
...
def 클래스메소드(cls[, 인수1, 인수2,,,]):
<수행할 문장1>
<수행할 문장2>
...
def 정적메소드([, 인수1, 인수2,,,]):
<수행할 문장1>
<수행할 문장2>
...
Class Method 정의
클래스 메소드는 decorator와 classmethod 함
수를 이용해 지정가능
@classmethod
def 함수명(cls인자,다른 인자) :
로직
def 함수명(cls인자,다른 인자) :
로직
클래스메소드명 =
classmehtod(함수명)
Decorator 사용 Classmethod 함수 사용
Static Method 정의
static 메소드는 decorator와 staticmethod 함
수를 이용해 지정가능
@staticmethod
def 함수명(인자) :
로직
def 함수명( 인자) :
로직
스태틱메소드명 =
staticmehtod(함수명)
Decorator 사용 Classmethod 함수 사용
Instance Method-self인자
인스턴스객체 메소드의 첫 인자는 Self를 사용
하여 각 인스턴스별로 메소드를 호출하여 사용
할 수 있도록 정의
def 함수명( self, 함수인자) :
로직
Self 인자 사용
Class 속성 관리 기준
파이썬은 클래스 객체가 정의되면 __dict__ 내부
에 클래스의 속성 즉, 멤버를 관리
클래스 생성 클래스 속성관리
__dict__
object class
object 클래스 객체내의 __dict__ 의 멤버관리 확
인
type class
type클래스 객체내의 __dict__ 의 멤버관리 확인
사용자 정의 class 예시
사용자 정의 P 클래스 객체내의 __dict__ 의 멤버
관리 확인
인스턴스 구조
Instance Notation
인스턴스 객체는 실제 클래스 객체가 생성시 할당
인스턴스 변수와 메소드는 런타임 즉 실행시 등록하여 사용할 수 있음
인스턴스명 : 클래스명
인스턴스 변수
인스턴스 메소드
(인스턴스 바인딩 경우)
class 클래스이름[(상속 클래스명)]:
def __init__(self[, 인수1, 인수2,,,]):
self.변수명 = 인수1
……
<수행할 문장 2>
...
def 인스턴스메소드(self[, 인수1, 인수2,,,]):
<수행할 문장1>
<수행할 문장2>
...
...
Instance명 = 클래스명( 초기인자들)
Instance 속성 관리 기준
파이썬은 인스턴스 객체가 생성되면 __dict__ 내
부에 인스턴스의 속성 즉, 멤버를 관리
{'name': 'name'}
p.__dict__
Class /instance Member
Class Member
Class Object는 클래스 메소드, 정적메소드, 클
래스 내부 변수 등을 관리한다.
Class 내
부 멤버
인스턴스
내부 멤버
Class 멤버 관리 영역
사용자 정의 P 클래스 객체내의 __dict__ 의 멤버
를 런타임 추가 가능
Instance 멤버 관리 영역
파이썬은 인스턴스 객체 생성된 이후에 인스터스
에 속성을 정의하고 할당하면 기존에 없으면 신
규로 추가 됨
객체 멤버
참조기준
Moon Yong Joon
클래스와 인스턴스 관계
Object Namespace 흐름
Base
class
class
instance instance instance
상속
인스턴스 생성
Dict{}
Dict{}
Dict{} Dict{} Dict{}
Namespace
검색
객체는 자신들이 관리
하는 Namespace 공간
을 생성하며
객체 내의 속성이나 메
소드 호출시 이를 검색
해서 처리
Class & instance scope
Class Object는 인스턴스를 만드는 기준을 정리한다.
클래스를 정의한다고 하나의 저장공간(Namespace) 기준이 되는 것은 아니다.
- 클래스 저장공간과 인스턴스 저장공간이 분리된다
User
defined
Class
Instance
Instance
Instance
Built-in
Class
상속 인스턴스화
Object Scope
Object Namespace
Class/Instance 관계 매핑
Class 키워드로 클래스 정의
상속은 class 키워드 다음() 내에 상속할 클래스 정의
인스턴스 생성은 클래스명에 ()연산자 사용
Super ClassClassinstance
상속인스턴스화
class A(object):
def whoami(self):
return self.__class__.__name__
a = A()
Class/Instance 관계 보기
내장 변수를 이용해서 Class와 Instance 관계를
확인
class A(object):
def whoami(self):
return self.__class__.__name__
a = A()
print a.whoami()
print a.__class__.__base__.__name__
인스턴스의 클래스 이름
: A
인스턴스의 클래스의 상속
클래스 이름
: object
속성 접근 방법
속성 접근 방법
파이썬은 class 객체가 정의한 후에 인스턴스 객
체를 생성하면 인스턴스 객체는 상위참조가 허용
되므로 class 객체의 속성을 참조 가능
클래스 P 인스턴스 p
{'age': 20, 'name': 'name'}
p.__dict__
<dictproxy {'__dict__': <attribute '__dict__'
of 'P' objects>,
'__doc__': None,
'__init__': <function __main__.__init__>,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__' of
'P' objects>,
'mailaddress': 'default address',
'name': 'default'}>
P.__dict__
상위 참조
속성 접근 방법 예시
인스턴스 객체에서 class 객체 내의 변수를 접근
하면 인스턴스 내에 없으므로 접근이 가능
클래스 P 인스턴스 p
{'age': 20, 'name': 'name'}
<dictproxy {'__dict__': <attribute
'__dict__' of 'P' objects>,
'__doc__': None,
'__init__': <function
__main__.__init__>,
'__module__': '__main__',
'__weakref__': <attribute '__weakref__'
of 'P' objects>,
'mailaddress': 'default address',
'name': 'default'}>
P.__dict__
상위 참조
>>> p.mailaddress
'default address'
Class P 내의
mailaddress를 접근
하여 결과값 출력
네임스페이스 관리 규칙
객체는 scope/namespace가진다
파이썬 class/instance/function은 객체이므로
자신만의 namespace만 가지고 있다
__dict__
class A
__dict__
instance A
__dict__
def add
__dict__
module A
모듈 객체 처리 규칙
파이썬 모듈을 실행하거나 idle 창에서
__name__을 조회할 경우 기본으로 __main__을
가지고 있음
이름으로 관리 : 오버로딩 불가
파이썬은 이름으로 식별하여 찾기에 메소드에 대
한 시그너처를 구별하지 않음

More Related Content

What's hot

Introduction to OOP concepts
Introduction to OOP conceptsIntroduction to OOP concepts
Introduction to OOP conceptsAhmed Farag
 
도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기JangHyuk You
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Chris Ohk
 
Introduction to python 3
Introduction to python 3Introduction to python 3
Introduction to python 3Youhei Sakurai
 
9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in javaNilesh Dalvi
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기Arawn Park
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data StructureChan Shik Lim
 
Constructor and Destructor PPT
Constructor and Destructor PPTConstructor and Destructor PPT
Constructor and Destructor PPTShubham Mondal
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현Bongseok Cho
 
Python Exception Handling
Python Exception HandlingPython Exception Handling
Python Exception HandlingRTS Tech
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
 
Python unit 3 m.sc cs
Python unit 3 m.sc csPython unit 3 m.sc cs
Python unit 3 m.sc csKALAISELVI P
 
Class, object and inheritance in python
Class, object and inheritance in pythonClass, object and inheritance in python
Class, object and inheritance in pythonSantosh Verma
 

What's hot (20)

Introduction to OOP concepts
Introduction to OOP conceptsIntroduction to OOP concepts
Introduction to OOP concepts
 
도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기도메인 주도 설계 - 6장 도메인 객체의 생명주기
도메인 주도 설계 - 6장 도메인 객체의 생명주기
 
Oop concepts in python
Oop concepts in pythonOop concepts in python
Oop concepts in python
 
Class or Object
Class or ObjectClass or Object
Class or Object
 
Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2Momenti Seminar - A Tour of Rust, Part 2
Momenti Seminar - A Tour of Rust, Part 2
 
Python-DataAbstarction.pptx
Python-DataAbstarction.pptxPython-DataAbstarction.pptx
Python-DataAbstarction.pptx
 
Advanced Python : Decorators
Advanced Python : DecoratorsAdvanced Python : Decorators
Advanced Python : Decorators
 
Introduction to python 3
Introduction to python 3Introduction to python 3
Introduction to python 3
 
Python OOPs
Python OOPsPython OOPs
Python OOPs
 
9. Input Output in java
9. Input Output in java9. Input Output in java
9. Input Output in java
 
#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기#살아있다 #자프링외길12년차 #코프링2개월생존기
#살아있다 #자프링외길12년차 #코프링2개월생존기
 
Python - object oriented
Python - object orientedPython - object oriented
Python - object oriented
 
Python Programming: Data Structure
Python Programming: Data StructurePython Programming: Data Structure
Python Programming: Data Structure
 
concept of oops
concept of oopsconcept of oops
concept of oops
 
Constructor and Destructor PPT
Constructor and Destructor PPTConstructor and Destructor PPT
Constructor and Destructor PPT
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
Python Exception Handling
Python Exception HandlingPython Exception Handling
Python Exception Handling
 
자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법
 
Python unit 3 m.sc cs
Python unit 3 m.sc csPython unit 3 m.sc cs
Python unit 3 m.sc cs
 
Class, object and inheritance in python
Class, object and inheritance in pythonClass, object and inheritance in python
Class, object and inheritance in python
 

Viewers also liked

파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310Yong Joon Moon
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기Yong Joon Moon
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기Yong Joon Moon
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815Yong Joon Moon
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기Yong Joon Moon
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기Yong Joon Moon
 
확률 통계 (파이썬)
확률 통계 (파이썬)확률 통계 (파이썬)
확률 통계 (파이썬)Yong Joon Moon
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색Yong Joon Moon
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Yong Joon Moon
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
파이썬 sqlite 이해하기
파이썬 sqlite 이해하기파이썬 sqlite 이해하기
파이썬 sqlite 이해하기Yong Joon Moon
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기Yong Joon Moon
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Yong Joon Moon
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍Yong Joon Moon
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기Yong Joon Moon
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기Yong Joon Moon
 

Viewers also liked (20)

파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기파이썬 Collections 모듈 이해하기
파이썬 Collections 모듈 이해하기
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
 
확률 통계 (파이썬)
확률 통계 (파이썬)확률 통계 (파이썬)
확률 통계 (파이썬)
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
파이썬 sqlite 이해하기
파이썬 sqlite 이해하기파이썬 sqlite 이해하기
파이썬 sqlite 이해하기
 
파이썬 Xml 이해하기
파이썬 Xml 이해하기파이썬 Xml 이해하기
파이썬 Xml 이해하기
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713Processing 기초 이해하기_20160713
Processing 기초 이해하기_20160713
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기
 
파이썬 Special method 이해하기
파이썬 Special method 이해하기파이썬 Special method 이해하기
파이썬 Special method 이해하기
 

Similar to 파이썬 객체 클래스 이해하기

파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기Yong Joon Moon
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understandingYong Joon Moon
 
Python class
Python classPython class
Python classHerren
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong Joon Moon
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기Yong Joon Moon
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Park Jonggun
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403Yong Joon Moon
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2Heejun Kim
 
9 object class
9 object class9 object class
9 object class웅식 전
 
Android Programming
Android ProgrammingAndroid Programming
Android ProgrammingJake Yoon
 
Android Programming - Input
Android Programming - InputAndroid Programming - Input
Android Programming - InputJake Yoon
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴KIM HEE JAE
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6Chris Ohk
 
Scala companion object
Scala companion objectScala companion object
Scala companion objectYong Joon Moon
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지SeongHyun Ahn
 

Similar to 파이썬 객체 클래스 이해하기 (20)

파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기파이썬 class 및 function namespace 이해하기
파이썬 class 및 function namespace 이해하기
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding
 
Python class
Python classPython class
Python class
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java class
Java classJava class
Java class
 
9 object class
9 object class9 object class
9 object class
 
Android Programming
Android ProgrammingAndroid Programming
Android Programming
 
Android Programming - Input
Android Programming - InputAndroid Programming - Input
Android Programming - Input
 
Javascript 객체생성패턴
Javascript 객체생성패턴Javascript 객체생성패턴
Javascript 객체생성패턴
 
2014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #62014-15 Intermediate C++ Study #6
2014-15 Intermediate C++ Study #6
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Scala companion object
Scala companion objectScala companion object
Scala companion object
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 

More from Yong 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
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법Yong Joon Moon
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편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
 

More from Yong Joon Moon (20)

rust ownership
rust ownership rust ownership
rust ownership
 
Scala namespace scope
Scala namespace scopeScala namespace scope
Scala namespace scope
 
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
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Python+numpy pandas 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
 
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편
 

파이썬 객체 클래스 이해하기

  • 4. 파이썬 객체 만드는 법 파이썬에서는 메타클래스에서 클래스를 만들고 이 클래스에서 인스턴스를 만듬
  • 5. type 메타클래스 type 메타클래스는 2가지 일을 한다. 객체를 넣 으면 그 객체가 어느 클래스에 의해 만들어졌는지 를 표시하거나 새로운 클래스를 만들때 사용
  • 7. Class 문이 하는 일 Class 문으로 생성하는 클래스와 메타클래스로 생성하는 클래스는 동일한 일을 수행
  • 8. type 메타클래스 결정 type 메타클래스로 클래스 정의 만들기 8
  • 9. type 메타클래스 결정 : 결과 type 메타클래스로 클래스 정의하고 실행 결과 9 ['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'>
  • 11. Type Class 문자열과 정수 타입 클래스가 type 클래스로 만들 어지므로 이에 대한 체크 11
  • 12. Object Class Object Class 에 대한 class와 instance에 대한 타 입 체크 12
  • 15. 메타클래스 : __call__ Meta 클래스는 실제 내부적으로 작동되므로 인스 턴스가 생성될 때 __call__을 호출해서 사전으로 클래스를 만듦
  • 16. 함수를 이용해서 클래스 만들기 Type 메타클래스를 함수의 리턴값으로 해서 실제 클래스 객체를 만들기
  • 17. 사용자 메타 클래스 만들기 Meta 클래스에서 type을 상속받아서 새로 만드 는 클래스의 metaclass=Meta로 선언하면 실제 클래스도 Meta에 의해 만들어지는 구조로 설정됨 사용자 메타를 만들어서 클래스 생성
  • 20. class 내의 생성자 처리 방식 Class명(인자)를 호출하면 __call__이 호출되면서 __new__와 __init__을 차례대로 호출해서 인스턴 스를 처리
  • 21. 모든 것은 객체 파이썬에서는 클래스도 객체이고 인스턴스도 객 체이다 Class object instance object int 클래스 1 인스턴스int.__call__(1) int(1) 인스턴스 생성
  • 22. 함수도 객체 파이썬에서는 클래스도 객체이고 인스턴스도 객 체이다 def 함수명 (함수 파라미터) : 함수 로직 함수결과처리 (return/yield) object function code 인스턴스 객체 생성
  • 24. 멤버 호출 시 bubbling 검색 인스턴스에 없는 멤버는 bubbling으로 상위를 검 색하고 검색된 결과를 실행한다 __dict__ class A __dict__ instance A __dict__ class object 검색 검색
  • 25. Class와 instance 관리영역 분리 인스턴스에 없는 멤버는 bubbling으로 상위를 검 색하고 검색된 결과를 실행한다
  • 27. 변수는 객체 참조만 관리 파이썬에서는 변수는 객체의 참조만 관리하는 구 조 변수 instance object p 1 인스턴스 p = 1 객체 주소 할당 instance object “abc” 인스턴스 p = “abc” 변수p는 타입과 무 관하게 객체 주소만 저장 X O
  • 28. 변수는 항상 할당 필요 파이썬에서는 변수는 객체의 참조만 관리하는 구 조이므로 초기할당이 되어 있어야 함
  • 30. 클래스 메소드 : 런타입 추가 클래스 객체의 namespace가 공개되어 있어 별 도의 함수를 정의한 후에 classmethod로 등록해 서 처리 가능
  • 31. 클래스 변수 파이썬 클래스 객체에 변수를 지정하면 namespace에 변수명과 초기화된 값이 들어가 있어 항상 사용이 가능
  • 32. 인스턴스 메소드 : 런타임 파이썬 인스턴스 메소드에 대한 추가
  • 33. 객체의 멤버는 언제라도 삭제 파이썬 클래스 내부 멤버인 __init__을 삭제하면 실제 삭제됨
  • 36. Class Notation 파이썬 언어에서 객체를 만드는 타입을 Class를 정의하여 사용 클래스 명 변수 메소드 class 클래스이름[(상속 클래스명)]: <클래스 변수 1> <클래스 변수 2> ... def 인스턴스 메소드(self[, 인수1, 인수2,,,]): <수행할 문장 1> <수행할 문장 2> ... def 클래스메소드(cls[, 인수1, 인수2,,,]): <수행할 문장1> <수행할 문장2> ... def 정적메소드([, 인수1, 인수2,,,]): <수행할 문장1> <수행할 문장2> ...
  • 37. Class Method 정의 클래스 메소드는 decorator와 classmethod 함 수를 이용해 지정가능 @classmethod def 함수명(cls인자,다른 인자) : 로직 def 함수명(cls인자,다른 인자) : 로직 클래스메소드명 = classmehtod(함수명) Decorator 사용 Classmethod 함수 사용
  • 38. Static Method 정의 static 메소드는 decorator와 staticmethod 함 수를 이용해 지정가능 @staticmethod def 함수명(인자) : 로직 def 함수명( 인자) : 로직 스태틱메소드명 = staticmehtod(함수명) Decorator 사용 Classmethod 함수 사용
  • 39. Instance Method-self인자 인스턴스객체 메소드의 첫 인자는 Self를 사용 하여 각 인스턴스별로 메소드를 호출하여 사용 할 수 있도록 정의 def 함수명( self, 함수인자) : 로직 Self 인자 사용
  • 40. Class 속성 관리 기준 파이썬은 클래스 객체가 정의되면 __dict__ 내부 에 클래스의 속성 즉, 멤버를 관리 클래스 생성 클래스 속성관리 __dict__
  • 41. object class object 클래스 객체내의 __dict__ 의 멤버관리 확 인
  • 42. type class type클래스 객체내의 __dict__ 의 멤버관리 확인
  • 43. 사용자 정의 class 예시 사용자 정의 P 클래스 객체내의 __dict__ 의 멤버 관리 확인
  • 45. Instance Notation 인스턴스 객체는 실제 클래스 객체가 생성시 할당 인스턴스 변수와 메소드는 런타임 즉 실행시 등록하여 사용할 수 있음 인스턴스명 : 클래스명 인스턴스 변수 인스턴스 메소드 (인스턴스 바인딩 경우) class 클래스이름[(상속 클래스명)]: def __init__(self[, 인수1, 인수2,,,]): self.변수명 = 인수1 …… <수행할 문장 2> ... def 인스턴스메소드(self[, 인수1, 인수2,,,]): <수행할 문장1> <수행할 문장2> ... ... Instance명 = 클래스명( 초기인자들)
  • 46. Instance 속성 관리 기준 파이썬은 인스턴스 객체가 생성되면 __dict__ 내 부에 인스턴스의 속성 즉, 멤버를 관리 {'name': 'name'} p.__dict__
  • 48. Class Member Class Object는 클래스 메소드, 정적메소드, 클 래스 내부 변수 등을 관리한다. Class 내 부 멤버 인스턴스 내부 멤버
  • 49. Class 멤버 관리 영역 사용자 정의 P 클래스 객체내의 __dict__ 의 멤버 를 런타임 추가 가능
  • 50. Instance 멤버 관리 영역 파이썬은 인스턴스 객체 생성된 이후에 인스터스 에 속성을 정의하고 할당하면 기존에 없으면 신 규로 추가 됨
  • 53. Object Namespace 흐름 Base class class instance instance instance 상속 인스턴스 생성 Dict{} Dict{} Dict{} Dict{} Dict{} Namespace 검색 객체는 자신들이 관리 하는 Namespace 공간 을 생성하며 객체 내의 속성이나 메 소드 호출시 이를 검색 해서 처리
  • 54. Class & instance scope Class Object는 인스턴스를 만드는 기준을 정리한다. 클래스를 정의한다고 하나의 저장공간(Namespace) 기준이 되는 것은 아니다. - 클래스 저장공간과 인스턴스 저장공간이 분리된다 User defined Class Instance Instance Instance Built-in Class 상속 인스턴스화 Object Scope Object Namespace
  • 55. Class/Instance 관계 매핑 Class 키워드로 클래스 정의 상속은 class 키워드 다음() 내에 상속할 클래스 정의 인스턴스 생성은 클래스명에 ()연산자 사용 Super ClassClassinstance 상속인스턴스화 class A(object): def whoami(self): return self.__class__.__name__ a = A()
  • 56. Class/Instance 관계 보기 내장 변수를 이용해서 Class와 Instance 관계를 확인 class A(object): def whoami(self): return self.__class__.__name__ a = A() print a.whoami() print a.__class__.__base__.__name__ 인스턴스의 클래스 이름 : A 인스턴스의 클래스의 상속 클래스 이름 : object
  • 58. 속성 접근 방법 파이썬은 class 객체가 정의한 후에 인스턴스 객 체를 생성하면 인스턴스 객체는 상위참조가 허용 되므로 class 객체의 속성을 참조 가능 클래스 P 인스턴스 p {'age': 20, 'name': 'name'} p.__dict__ <dictproxy {'__dict__': <attribute '__dict__' of 'P' objects>, '__doc__': None, '__init__': <function __main__.__init__>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'P' objects>, 'mailaddress': 'default address', 'name': 'default'}> P.__dict__ 상위 참조
  • 59. 속성 접근 방법 예시 인스턴스 객체에서 class 객체 내의 변수를 접근 하면 인스턴스 내에 없으므로 접근이 가능 클래스 P 인스턴스 p {'age': 20, 'name': 'name'} <dictproxy {'__dict__': <attribute '__dict__' of 'P' objects>, '__doc__': None, '__init__': <function __main__.__init__>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'P' objects>, 'mailaddress': 'default address', 'name': 'default'}> P.__dict__ 상위 참조 >>> p.mailaddress 'default address' Class P 내의 mailaddress를 접근 하여 결과값 출력
  • 61. 객체는 scope/namespace가진다 파이썬 class/instance/function은 객체이므로 자신만의 namespace만 가지고 있다 __dict__ class A __dict__ instance A __dict__ def add __dict__ module A
  • 62. 모듈 객체 처리 규칙 파이썬 모듈을 실행하거나 idle 창에서 __name__을 조회할 경우 기본으로 __main__을 가지고 있음
  • 63. 이름으로 관리 : 오버로딩 불가 파이썬은 이름으로 식별하여 찾기에 메소드에 대 한 시그너처를 구별하지 않음