SlideShare a Scribd company logo
1 of 44
PYTHON
NAMESPACE
이해하기
Moon Yong Joon
NAMESPACE
기본
Namespace는 dict 타입관리
파이썬은 왜 모든 것을 name을 기준으로 체크할
까?
이름으로만 체크
Dict 타입 특성상 이름이 동일하
면 나중에 갱신된 것을 기준으로
처리하므로 절대 같은 이름이 2개
가 있을 수 없음
값은 모두 객체
Dict 특성 상 Value로 저장할 경
우 실제 모두 객체를 저장되어야
메소드로 실행이 가능
내장타입(built-in type)
파이썬은 왜 모든 것을 name을 기준으로 체크할
까?
내장 타입 클래스
내장타입에 namespace에 있는
모든 것을 내장타입 인스턴스에
서 호출해 사용가능
내장타입 인스턴스
내장타입을 기준으로 인스턴스를
만들 경우 인스턴스 내부에는 별
도의 namespace를 관리하지 않
는다.
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
모든 것은 객체
파이썬은 모든 것을 객체로 인식하고 처리
Derived class
object
Base class
object
Instance
object
생성
상속
Composited
class
object
__dict____dict__ __dict__
__dict__
객체 내의 Namespace 관리
파이썬 객체는 Namespace를 dict 데이터 타입으
로 관리하고 있어 이름으로 체크함
“속성명” : 속성값
Derived class
object
Instance
object
“속성명” : 속성값
instanceobj.__dict__ classobj.__dict__
__dict__ 속성 : class/function
파이썬 namespace는 모든 객체에 namespace
를 가짐. 단 일부 built-in 객체(int, float,tuple,
str 등)에는 제공하지 않음
__dict__ 속성 : Module
파이썬은 모든 것을 객체로 인식하고 처리
객체간의 관계
Class/Instance 관계
Class 키워드로 클래스 정의
상속은 class 키워드 다음() 내에 상속할 클래스 정의
인스턴스 생성은 클래스명에 ()연산자 사용
Super ClassClassinstance
상속인스턴스화
Class/Instance 관계 보기
내장 변수를 이용해서 Class와 Instance 관계를
확인
객체 namespace 조회
Base/derived/instance object에 대한 Namespace 영
역 조회
인스턴스 namespace 할당
self.변수명으로 할당
인스턴스 내의 namespace가 객체 접근 연산자
(.)을 사용해서 속성을 추가
self.__dict__ 직접 할당
인스턴스 내의 namespace가 dict 타입이므로
직접 dict 타입을 할당하거나 dict 타입이 아닐 경
우 namespace 내부에 할당하기
Composition class 접근
Other Class 정의
Composition 클래스 정의
메인 클래스 정의
Main class를 정의하고 인스턴스 속성으로
Other 인스턴스를 할당
인스턴스 생성
Child class로 하나의 인스턴스를 생성하고 값을
처리
클래스 속성 접근
인스턴스에 없는 속성은 class에 찾아서 binding
하여 실행함
Main 인스턴스
{'other': <__main__.Other object at
0x0444FC10>, 'types': <type 'type'>}
son.__dict__
{'type_s': <function type_s at 0x046ECD70>,
'__dict__': <attribute '__dict__' of 'Child' objects>,
'__module__': '__main__', 'altered': <function
altered at 0x046ECCF0>, 'override': <function
override at 0x046ECCB0>, '__weakref__':
<attribute '__weakref__' of 'Child' objects>,
'implicit': <function implicit at 0x046ECC70>,
'__init__': <function __init__ at 0x046ECAB0>,
'__doc__': None}
Main.__dict__
Main 클래스
def override(self):
print "CHILD override()“
처리 흐름
메소드 검색 및 실행
상속 속성 접근
object.__str__() 메소드를 처리하기 위해서는
Child/object를 검색해서 처리
Object 클래스
Main 인스턴스
{'other': <__main__.Other object at
0x0444FC10>, 'types': <type 'type'>}
son.__dict__
{'__setattr__': <slot wrapper '__setattr__' of 'object' objects>, '__reduce_ex__': <method
'__reduce_ex__' of 'object' objects>, '__new__': <built-in method __new__ of type object
at 0x1E2296E0>, '__reduce__': <method '__reduce__' of 'object' objects>, '__str__': <slot
wrapper '__str__' of 'object' objects>, '__format__': <method '__format__' of 'object'
objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'object' objects>,
'__class__': <attribute '__class__' of 'object' objects>, '__delattr__': <slot wrapper
'__delattr__' of 'object' objects>, '__subclasshook__': <method '__subclasshook__' of
'object' objects>, '__repr__': <slot wrapper '__repr__' of 'object' objects>, '__hash__': <slot
wrapper '__hash__' of 'object' objects>, '__sizeof__': <method '__sizeof__' of 'object'
objects>, '__doc__': 'The most base type', '__init__': <slot wrapper '__init__' of 'object'
objects>}
object.__dict_
_
{'type_s': <function type_s at 0x046ECD70>, '__dict__':
<attribute '__dict__' of 'Child' objects>, '__module__':
'__main__', 'altered': <function altered at 0x046ECCF0>,
'override': <function override at 0x046ECCB0>,
'__weakref__': <attribute '__weakref__' of 'Child' objects>,
'implicit': <function implicit at 0x046ECC70>, '__init__':
<function __init__ at 0x046ECAB0>, '__doc__': None}
Main.__dict__
Main 클래스
print(son.__str__())
처리 흐름
상
속
composition 속성 접근
implicit(self) 메소드를 호출하면 실제 Other 클
래스의 인스턴스로 접근
self.other.implicit()
Other 클래스
Main 인스턴스
{'other': <__main__.Other object at
0x0444FC10>, 'types': <type 'type'>}
son.__dict__
{'__module__': '__main__', 'altered': <function altered at
0x046EC7F0>, '__doc__': None, '__dict__': <attribute '__dict__'
of 'Other' objects>, 'override': <function override at
0x046ECA30>, '__weakref__': <attribute '__weakref__' of 'Other'
objects>, 'implicit': <function implicit at 0x046ECD30>}
Other.__dict__
{}
son.other.__dict__
{'type_s': <function type_s at 0x046ECD70>, '__dict__':
<attribute '__dict__' of 'Child' objects>, '__module__': '__main__',
'altered': <function altered at 0x046ECCF0>, 'override':
<function override at 0x046ECCB0>, '__weakref__': <attribute
'__weakref__' of 'Child' objects>, 'implicit': <function implicit at
0x046ECC70>, '__init__': <function __init__ at 0x046ECAB0>,
'__doc__': None}
Main.__dict__
Main 클래스
Other 인스턴스
def implicit(self):
self.other.implicit()
처리 흐름
함수
NAMESPACE
함수 객체 namespace
함수 구조
함수를 정의하면 function class이 인스턴스가
생성된다.
object
function code
def add(x,y) :
return x+y
instance
__dict__ __dict__ __dict__
__dict__
함수 상속구조 확인하기
add 함수를 기준으로 클래스 구조를 확인하면 최
상위는 object이고 function과 code 클래스가
조회
object
function code
def add(x,y) :
return x+y
instance
함수 변수 namespace
함수 변수 Scoping
함수에 실행하면 함수 내의 변수에 대한 검색을 처리.
검색 순은 Local > global > Built-in 순으로 호출
Global/nonlocal 키워드를 변수에 정의해서 직접 상위 영역을 직접 참조할 수
있다
globalBuilt-in
함수 Scope
함수 Namespace
local
내부함수
local
locals()/globals()
함수의 이름공간 locals() 함수를 이용하여 확인하기
함수명.__globals__ 나 globals() 함수를 호출하여 글로
벌context 내의 이름공간을 확인
Global namespace 참조
함수는 local namespace를 관리하며 상위는
global namespace를 참조가 가능함
Nested 변수 Namespace
외부함수를 내포함수로 사용
외부함수를 내부함수 내에 변수에 할당한 후 사
용하면 내포함수로 처리됨
외부함수를 함수 내부에서 호출
외부함수를 함수 내부에서 실행하고 변수에 할
당한 후 사용
함수 내부에 내포함수 사용
함수 내부에 함수를 정의하고 직접 내부에서 사
용
Closure context
함수 – Closure 란
외부함수 내의 자유변수를 내부함수에서 사용하면 기존 외부함
수도 내부함수가 종료 시까지 같이 지속된다.
함수 단위의 variable scope 위반이지만 현재 함수형 언어에서는
함수 내의 변수를 공유하여 처리할 수 있도록 구성하여 처리할
수 있도록 구성이 가능하다.
외부함수
내부함수
외부함수
이름공간
내부함수
이름공간
Closure context 구성
내부함수 변수 검색 순
서는 내부함수 이름공
간 -> 외부함수 이름
공간
38
함수 – Closure context
내부 함수를 함수의 결과로 외부에 전달 할 경우
Closure 환경 확인 하는 법
__closure__
(3버전)
func_closure
(2버전)
Closure
context cell_contents
39
함수 – Closure : 자유변수
자유변수란 외부함수의 로컬변수에 있는 변수
외부함수
Context
내부함수
Context
Local Local
Int
Float
string
Immutable 객체자유변수
외부에서 사용
함수
호출
40
함수 – Closure : __closure__
파이썬은 클로저 환경에 대해서도 별도의 객체로
제공하며 이 환경에 대해서도 접근이 가능함
41
함수 Closure : 자유변수 갱신
Python 3버전에서는 nonlocal로 정의해서 처리하
면 자유변수가 갱신됨
42
함수와 인스턴스 연계
함수에서 인스턴스 속성 참조
함수에서 인스턴스 속성을 참조할 경우 한정자(인
스턴스).속성으로 호출해서 처리
44

More Related Content

What's hot

파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131Yong Joon Moon
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기Yong Joon Moon
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기Yong Joon Moon
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기 Yong Joon Moon
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기Yong Joon Moon
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기Yong Joon Moon
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법Yong Joon Moon
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기Yong Joon Moon
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기Yong Joon Moon
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229Yong Joon Moon
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130Yong Joon Moon
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색Yong Joon Moon
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229Yong Joon Moon
 
엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612Yong Joon Moon
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기 Yong Joon Moon
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301Yong Joon Moon
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈Yong Joon Moon
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311Yong Joon Moon
 

What's hot (20)

파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
파이썬 xml 이해하기
파이썬 xml 이해하기파이썬 xml 이해하기
파이썬 xml 이해하기
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법파이썬 내부 데이터 검색 방법
파이썬 내부 데이터 검색 방법
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229파이썬+함수이해하기 20160229
파이썬+함수이해하기 20160229
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
파이썬 데이터 검색
파이썬 데이터 검색파이썬 데이터 검색
파이썬 데이터 검색
 
파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229파이썬+함수 데코레이터+이해하기 20160229
파이썬+함수 데코레이터+이해하기 20160229
 
엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612엘라스틱서치 이해하기 20160612
엘라스틱서치 이해하기 20160612
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301파이썬+Json+이해하기 20160301
파이썬+Json+이해하기 20160301
 
파이썬 크롤링 모듈
파이썬 크롤링 모듈파이썬 크롤링 모듈
파이썬 크롤링 모듈
 
파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311파이썬+데이터+구조+이해하기 20160311
파이썬+데이터+구조+이해하기 20160311
 

Viewers also liked

Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815Yong Joon Moon
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Yong Joon Moon
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기Yong Joon Moon
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기Yong Joon Moon
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 Yong Joon Moon
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Yong Joon Moon
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기Yong Joon Moon
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Yong 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 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편Yong Joon Moon
 
Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Yong Joon Moon
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기Yong Joon Moon
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편Yong Joon Moon
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초 Yong Joon Moon
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Yong Joon Moon
 

Viewers also liked (16)

Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815Python_numpy_pandas_matplotlib 이해하기_20160815
Python_numpy_pandas_matplotlib 이해하기_20160815
 
파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기파이썬 엑셀_csv 처리하기
파이썬 엑셀_csv 처리하기
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
 
텐서플로우 기초 이해하기
텐서플로우 기초 이해하기 텐서플로우 기초 이해하기
텐서플로우 기초 이해하기
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730
 
파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기파이썬 Numpy 선형대수 이해하기
파이썬 Numpy 선형대수 이해하기
 
Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706Jupyter notebok tensorboard 실행하기_20160706
Jupyter notebok tensorboard 실행하기_20160706
 
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 4편
Python+numpy pandas 4편Python+numpy pandas 4편
Python+numpy pandas 4편
 
Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기Python Sympy 모듈 이해하기
Python Sympy 모듈 이해하기
 
파이썬 문자열 이해하기
파이썬 문자열 이해하기파이썬 문자열 이해하기
파이썬 문자열 이해하기
 
Python+numpy pandas 1편
Python+numpy pandas 1편Python+numpy pandas 1편
Python+numpy pandas 1편
 
파이썬 기초
파이썬 기초 파이썬 기초
파이썬 기초
 
Python array.array 모듈 이해하기
Python array.array 모듈 이해하기Python array.array 모듈 이해하기
Python array.array 모듈 이해하기
 

Similar to 파이썬 class 및 function namespace 이해하기

PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지Yoonwhan Lee
 
9 object class
9 object class9 object class
9 object class웅식 전
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13hungrok
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로NHN FORWARD
 
Jlook open api platform-appdevguide
Jlook open api platform-appdevguideJlook open api platform-appdevguide
Jlook open api platform-appdevguideHongSeong Jeon
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device accessJinKyoungHeo
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지SeongHyun Ahn
 
E government framework
E government frameworkE government framework
E government frameworkHyungKuIm
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
Python class
Python classPython class
Python classHerren
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로Dongmin Shin
 
Collection framework
Collection frameworkCollection framework
Collection frameworkssuser34b989
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)Hankyo
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기영우 박
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃Kwangyoun Jung
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)MIN SEOK KOO
 

Similar to 파이썬 class 및 function namespace 이해하기 (20)

PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
9 object class
9 object class9 object class
9 object class
 
Java script 강의자료_ed13
Java script 강의자료_ed13Java script 강의자료_ed13
Java script 강의자료_ed13
 
[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로[2018] MyBatis에서 JPA로
[2018] MyBatis에서 JPA로
 
Jlook open api platform-appdevguide
Jlook open api platform-appdevguideJlook open api platform-appdevguide
Jlook open api platform-appdevguide
 
5-3. html5 device access
5-3. html5 device access5-3. html5 device access
5-3. html5 device access
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 
E government framework
E government frameworkE government framework
E government framework
 
컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
Python class
Python classPython class
Python class
 
Hacosa js study 6th
Hacosa js study 6thHacosa js study 6th
Hacosa js study 6th
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
MyBatis에서 JPA로
MyBatis에서 JPA로MyBatis에서 JPA로
MyBatis에서 JPA로
 
Swt J Face 2/3
Swt J Face 2/3Swt J Face 2/3
Swt J Face 2/3
 
Xe hack
Xe hackXe hack
Xe hack
 
Collection framework
Collection frameworkCollection framework
Collection framework
 
02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)02.실행환경 실습교재(데이터처리)
02.실행환경 실습교재(데이터처리)
 
Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기Django admin site 커스텀하여 적극적으로 활용하기
Django admin site 커스텀하여 적극적으로 활용하기
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
 
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
이것이 자바다 Chap.11 기본 API 클래스(java)(KOR)
 

More from 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 type class pattern
Scala type class patternScala type class pattern
Scala type class patternYong 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
 

More from Yong Joon Moon (16)

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 type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
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
 
소프트웨어와 인문학
소프트웨어와 인문학 소프트웨어와 인문학
소프트웨어와 인문학
 

파이썬 class 및 function namespace 이해하기

  • 3. Namespace는 dict 타입관리 파이썬은 왜 모든 것을 name을 기준으로 체크할 까? 이름으로만 체크 Dict 타입 특성상 이름이 동일하 면 나중에 갱신된 것을 기준으로 처리하므로 절대 같은 이름이 2개 가 있을 수 없음 값은 모두 객체 Dict 특성 상 Value로 저장할 경 우 실제 모두 객체를 저장되어야 메소드로 실행이 가능
  • 4. 내장타입(built-in type) 파이썬은 왜 모든 것을 name을 기준으로 체크할 까? 내장 타입 클래스 내장타입에 namespace에 있는 모든 것을 내장타입 인스턴스에 서 호출해 사용가능 내장타입 인스턴스 내장타입을 기준으로 인스턴스를 만들 경우 인스턴스 내부에는 별 도의 namespace를 관리하지 않 는다.
  • 5. Object Namespace 흐름 Base class class instance instance instance 상속 인스턴스 생성 Dict{} Dict{} Dict{} Dict{} Dict{} Namespace 검색 객체는 자신들이 관리 하는 Namespace 공간 을 생성하며 객체 내의 속성이나 메 소드 호출시 이를 검색 해서 처리
  • 6. Class & instance scope Class Object는 인스턴스를 만드는 기준을 정리한다. 클래스를 정의한다고 하나의 저장공간(Namespace) 기준이 되는 것은 아니다. - 클래스 저장공간과 인스턴스 저장공간이 분리된다 User defined Class Instance Instance Instance Built-in Class 상속 인스턴스화 Object Scope Object Namespace
  • 7. 모든 것은 객체 파이썬은 모든 것을 객체로 인식하고 처리 Derived class object Base class object Instance object 생성 상속 Composited class object __dict____dict__ __dict__ __dict__
  • 8. 객체 내의 Namespace 관리 파이썬 객체는 Namespace를 dict 데이터 타입으 로 관리하고 있어 이름으로 체크함 “속성명” : 속성값 Derived class object Instance object “속성명” : 속성값 instanceobj.__dict__ classobj.__dict__
  • 9. __dict__ 속성 : class/function 파이썬 namespace는 모든 객체에 namespace 를 가짐. 단 일부 built-in 객체(int, float,tuple, str 등)에는 제공하지 않음
  • 10. __dict__ 속성 : Module 파이썬은 모든 것을 객체로 인식하고 처리
  • 12. Class/Instance 관계 Class 키워드로 클래스 정의 상속은 class 키워드 다음() 내에 상속할 클래스 정의 인스턴스 생성은 클래스명에 ()연산자 사용 Super ClassClassinstance 상속인스턴스화
  • 13. Class/Instance 관계 보기 내장 변수를 이용해서 Class와 Instance 관계를 확인
  • 14. 객체 namespace 조회 Base/derived/instance object에 대한 Namespace 영 역 조회
  • 16. self.변수명으로 할당 인스턴스 내의 namespace가 객체 접근 연산자 (.)을 사용해서 속성을 추가
  • 17. self.__dict__ 직접 할당 인스턴스 내의 namespace가 dict 타입이므로 직접 dict 타입을 할당하거나 dict 타입이 아닐 경 우 namespace 내부에 할당하기
  • 19. Other Class 정의 Composition 클래스 정의
  • 20. 메인 클래스 정의 Main class를 정의하고 인스턴스 속성으로 Other 인스턴스를 할당
  • 21. 인스턴스 생성 Child class로 하나의 인스턴스를 생성하고 값을 처리
  • 22. 클래스 속성 접근 인스턴스에 없는 속성은 class에 찾아서 binding 하여 실행함 Main 인스턴스 {'other': <__main__.Other object at 0x0444FC10>, 'types': <type 'type'>} son.__dict__ {'type_s': <function type_s at 0x046ECD70>, '__dict__': <attribute '__dict__' of 'Child' objects>, '__module__': '__main__', 'altered': <function altered at 0x046ECCF0>, 'override': <function override at 0x046ECCB0>, '__weakref__': <attribute '__weakref__' of 'Child' objects>, 'implicit': <function implicit at 0x046ECC70>, '__init__': <function __init__ at 0x046ECAB0>, '__doc__': None} Main.__dict__ Main 클래스 def override(self): print "CHILD override()“ 처리 흐름 메소드 검색 및 실행
  • 23. 상속 속성 접근 object.__str__() 메소드를 처리하기 위해서는 Child/object를 검색해서 처리 Object 클래스 Main 인스턴스 {'other': <__main__.Other object at 0x0444FC10>, 'types': <type 'type'>} son.__dict__ {'__setattr__': <slot wrapper '__setattr__' of 'object' objects>, '__reduce_ex__': <method '__reduce_ex__' of 'object' objects>, '__new__': <built-in method __new__ of type object at 0x1E2296E0>, '__reduce__': <method '__reduce__' of 'object' objects>, '__str__': <slot wrapper '__str__' of 'object' objects>, '__format__': <method '__format__' of 'object' objects>, '__getattribute__': <slot wrapper '__getattribute__' of 'object' objects>, '__class__': <attribute '__class__' of 'object' objects>, '__delattr__': <slot wrapper '__delattr__' of 'object' objects>, '__subclasshook__': <method '__subclasshook__' of 'object' objects>, '__repr__': <slot wrapper '__repr__' of 'object' objects>, '__hash__': <slot wrapper '__hash__' of 'object' objects>, '__sizeof__': <method '__sizeof__' of 'object' objects>, '__doc__': 'The most base type', '__init__': <slot wrapper '__init__' of 'object' objects>} object.__dict_ _ {'type_s': <function type_s at 0x046ECD70>, '__dict__': <attribute '__dict__' of 'Child' objects>, '__module__': '__main__', 'altered': <function altered at 0x046ECCF0>, 'override': <function override at 0x046ECCB0>, '__weakref__': <attribute '__weakref__' of 'Child' objects>, 'implicit': <function implicit at 0x046ECC70>, '__init__': <function __init__ at 0x046ECAB0>, '__doc__': None} Main.__dict__ Main 클래스 print(son.__str__()) 처리 흐름 상 속
  • 24. composition 속성 접근 implicit(self) 메소드를 호출하면 실제 Other 클 래스의 인스턴스로 접근 self.other.implicit() Other 클래스 Main 인스턴스 {'other': <__main__.Other object at 0x0444FC10>, 'types': <type 'type'>} son.__dict__ {'__module__': '__main__', 'altered': <function altered at 0x046EC7F0>, '__doc__': None, '__dict__': <attribute '__dict__' of 'Other' objects>, 'override': <function override at 0x046ECA30>, '__weakref__': <attribute '__weakref__' of 'Other' objects>, 'implicit': <function implicit at 0x046ECD30>} Other.__dict__ {} son.other.__dict__ {'type_s': <function type_s at 0x046ECD70>, '__dict__': <attribute '__dict__' of 'Child' objects>, '__module__': '__main__', 'altered': <function altered at 0x046ECCF0>, 'override': <function override at 0x046ECCB0>, '__weakref__': <attribute '__weakref__' of 'Child' objects>, 'implicit': <function implicit at 0x046ECC70>, '__init__': <function __init__ at 0x046ECAB0>, '__doc__': None} Main.__dict__ Main 클래스 Other 인스턴스 def implicit(self): self.other.implicit() 처리 흐름
  • 27. 함수 구조 함수를 정의하면 function class이 인스턴스가 생성된다. object function code def add(x,y) : return x+y instance __dict__ __dict__ __dict__ __dict__
  • 28. 함수 상속구조 확인하기 add 함수를 기준으로 클래스 구조를 확인하면 최 상위는 object이고 function과 code 클래스가 조회 object function code def add(x,y) : return x+y instance
  • 30. 함수 변수 Scoping 함수에 실행하면 함수 내의 변수에 대한 검색을 처리. 검색 순은 Local > global > Built-in 순으로 호출 Global/nonlocal 키워드를 변수에 정의해서 직접 상위 영역을 직접 참조할 수 있다 globalBuilt-in 함수 Scope 함수 Namespace local 내부함수 local
  • 31. locals()/globals() 함수의 이름공간 locals() 함수를 이용하여 확인하기 함수명.__globals__ 나 globals() 함수를 호출하여 글로 벌context 내의 이름공간을 확인
  • 32. Global namespace 참조 함수는 local namespace를 관리하며 상위는 global namespace를 참조가 가능함
  • 34. 외부함수를 내포함수로 사용 외부함수를 내부함수 내에 변수에 할당한 후 사 용하면 내포함수로 처리됨
  • 35. 외부함수를 함수 내부에서 호출 외부함수를 함수 내부에서 실행하고 변수에 할 당한 후 사용
  • 36. 함수 내부에 내포함수 사용 함수 내부에 함수를 정의하고 직접 내부에서 사 용
  • 38. 함수 – Closure 란 외부함수 내의 자유변수를 내부함수에서 사용하면 기존 외부함 수도 내부함수가 종료 시까지 같이 지속된다. 함수 단위의 variable scope 위반이지만 현재 함수형 언어에서는 함수 내의 변수를 공유하여 처리할 수 있도록 구성하여 처리할 수 있도록 구성이 가능하다. 외부함수 내부함수 외부함수 이름공간 내부함수 이름공간 Closure context 구성 내부함수 변수 검색 순 서는 내부함수 이름공 간 -> 외부함수 이름 공간 38
  • 39. 함수 – Closure context 내부 함수를 함수의 결과로 외부에 전달 할 경우 Closure 환경 확인 하는 법 __closure__ (3버전) func_closure (2버전) Closure context cell_contents 39
  • 40. 함수 – Closure : 자유변수 자유변수란 외부함수의 로컬변수에 있는 변수 외부함수 Context 내부함수 Context Local Local Int Float string Immutable 객체자유변수 외부에서 사용 함수 호출 40
  • 41. 함수 – Closure : __closure__ 파이썬은 클로저 환경에 대해서도 별도의 객체로 제공하며 이 환경에 대해서도 접근이 가능함 41
  • 42. 함수 Closure : 자유변수 갱신 Python 3버전에서는 nonlocal로 정의해서 처리하 면 자유변수가 갱신됨 42
  • 44. 함수에서 인스턴스 속성 참조 함수에서 인스턴스 속성을 참조할 경우 한정자(인 스턴스).속성으로 호출해서 처리 44