SlideShare a Scribd company logo
Python
Study Of Landvibe
made by 김건희
오늘의 주제
Class의 이해
Outline
1. Understanding Class
2. Initialization Function : __init__()
3. Class Variable & Instance Variable
4. Data Hiding & Name Mangling
5. Getter, Setter and @property
6. Inheritance & Mixin & Polymorphism
Understanding Class
함수 : 특정 행위에 대해 기술한 소스 코드
클래스 : 특정 행위와 상태를 담을 수 있는 객체를 생성하기 위한 명세서
모듈 : 함수, 클래스 등을 포함하여 독립적인 파일(.py)로 저장하여 언제든지 호
출하여 재사할 수 있는 공통 소스 코드들의 집합
Don’t Repeat Yourself!
>>> “같은 소스를 반복해서 작성하지 말라”
소스 재사용
Understanding Class
함수 : 특정 행위에 대해 기술한 소스 코드
클래스 : 특정 행위와 상태를 담을 수 있는 객체를 생성하기 위한 명세서
모듈 : 함수, 클래스 등을 포함하여 독립적인 파일(.py)로 저장하여 언제든지 호
출하여 재사할 수 있는 공통 소스 코드들의 집합
Don’t Repeat Yourself!
>>> “같은 소스를 반복해서 작성하지 말라”
소스 재사용
Understanding Class
특정 행위와 상태를 담을 수 있는 객체를 생성하
기 위한 명세서
1. 클래스의 정의
Understanding Class
특정 행위와 상태를 담을 수 있는 객체를 생성하
기 위한 명세서
1. 클래스의 정의
특정 행위 : Method
Understanding Class
특정 상태 : Attribute
특정 행위와 상태를 담을 수 있는 객체를 생성하
기 위한 명세서
1. 클래스의 정의
특정 행위 : Method
Understanding Class
특정 상태 : Attribute
특정 행위와 상태를 담을 수 있는 객체를 생성하
기 위한 명세서
1. 클래스의 정의
특정 행위 : Method
명세서 : Class Name
클래스의 3요소 : 클래스명, 속성, 메소드
Understanding Class
Bom은 23살이다
Bom은 인하대학교를 다닌다
Bom은 간수치가 40이다
Bom은 술을 마시면 간수치가 50증가한다
Bom은 휴식을 취하면 간수치가 50떨어진다
1. 클래스의 정의
속성과 행위로 나눈다
속성 : Bom, 23살, 인하대 재학, 간수치40
행위 : 술마시면 간수치 +50, 휴식하면 간수치-50
Understanding Class
1. 클래스의 정의
class Bom:
name = ‘Bom’
age = 23
univ = “Inha”
liver_state = 40
def drink_alcohol(self):
liver += 50
print( name, “이가 술을 마십니다”)
def rest(self):
liver -= 50
print( name, “이가 휴식을 취합니다”)
Bom은 23살이다
Bom은 인하대학교를 다닌다
Bom은 간수치가 40이다
Bom은 술을 마시면 간수치가 50증가한다
Bom은 휴식을 취하면 간수치가 50떨어진다
클래스 내부함수의
첫 인자는 self
Understanding Class
2. 클래스의 사용
bom = Bom()
print(bom.name + ‘은 ’ + bom.univ + ‘대학교에 다닙니다’ )
bom.drink_alcohol()
print(bom.liver)
bom.rest()
print(bom.liver)
변수 = 클래스이름()
변수.속성이름
변수.함수이름()
Bom은 Inha대학교에 다닙니다
Bom이가 술을 마십니다
90
Bom이가 휴식을 취합니다
40
초기화 함수 내부에 선
언된 변수에는 self 키
워드가 붙는다
초기화 함수 : __init__()
1. __init___()
class Bom:
def __init__(self, name, age, univ)
print(‘초기화 함수 시작’)
self.name = name
self.age = age
self.univ = univ
self.liver_state = 40
def drink_alcohol(self):
liver += 50
print( name, “이가 술을 마십니다”)
def rest(self):
liver -= 50
print( name, “이가 휴식을 취합니다”)
C++ 과 Java의 생성자 함수와 같은 역할
클래스가 생성된 직후에 바로 실행된다 클래스 내부함수의
첫 인자는 self
초기화 함수 : __init__()
2. __init___() 사용
yang= Bom(‘양욱’, 20, ’인하’)
print(yang.name + ‘은 ’ + bom.univ + ‘대학교에 다닙니다’ )
yang.liver = 50
print(yang.liver)
yang.rest()
print(yang.liver)
초기화 함수 시작
양욱은 인하대학교에 다닙니다
90
Bom이가 휴식을 취합니다
140
초기화 함수 : __init__()
3. 주의사항
class Bom:
self.univ = ‘연세’
def __init__(self, name, age)
print(‘초기화 함수 시작’)
self.name = name
self.age = age
self.liver_state=40
__init__함수 밖에 self.변수이름 선언 안됨
class Bom:
def __init__(self, name)
self.name = name
self.age
b = Bom(“bom”)
print(b.age)
초기화 되지 않은 변수를 참조하면 에러
클래스 변수&인스턴스 변수
1. self
class Bom:
self.univ = ‘연세’
def __init__(self, name, age, univ)
print(‘초기화 함수 시작’)
self.name = name
self.age = age
self.liver_state=40
C++과 Java의 this 키워드와 같은 역할
지금 현재 속해있는 클래스를 참조한다
클래스 내부 함수의 첫 인자는 모두 self
class Bom:
def __init__(self, name, age, univ)
print(‘초기화 함수 시작’)
self.name = name
self.age = age
여기서 self는 모두
Bom클래스의 주소를
참조한다
초기화 함수 밖에 사용하면 안되는 이유!?
함수의 인자 self를
사용한것!
클래스 변수&인스턴스 변수
2. 클래스 객체와 인스턴스 객체의 namespace
class Bom:
name = ‘Bomin’
def __init__(self)
self.age = 23
>>> b1 = Bom()
>>> b1.name = ‘JumBomin
name=‘JumBomin’
b1(인스턴스)
name=‘Bomin’
Bom(클래스)
클래스 변수&인스턴스 변수
2. 클래스 객체와 인스턴스 객체의 namespace
>>> b1 = Bom()
>>> b1.name = ‘JumBomin’
>>> b2 = Bom()
>>> b1.name
JumBomin
>>> b2.name
Bomin
>>> Bom
Bomin
name=‘JumBomin’
b1(인스턴스)
name=‘Bomin’
Bom(클래스)
b2(인스턴스)
데이터은닉&이름장식
1. 데이터 은닉 (Data Hiding)
클래스의 내부 변수를 외부에서 접근하지 못하게 숨기는 것
변수의 신뢰도를 높혀준다
캡슐화 (Encapsulation)라고 부르기도 함
어떻게 접근을 못하게할까?
class Bom:
name = ‘Bomin’
>>> b1 = Bom()
>>> b1.name
Bomin
데이터은닉&이름장식
2. 이름 장식 (Name Mangling)
변수앞에 __(언더스코어 두개)를 붙혀
클래스 외부에서 접근하지 못하게 한다
어떻게 접근을 못하게할까?
class Bom:
__name = ‘Bomin’
>>> b1 = Bom()
>>> b1.name
AttributeError: type object ‘Bom’ has no atrribute ‘name’
>>> b1.__name
AttributeError: type object ‘Bom’ has no atrribute ‘__name’
데이터은닉&이름장식
dir(classname) 함수 : classname내부의 namepace출력
‘_클래스명__변수명 ‘ 으로 namespace가 바뀜
>>> name, __name 접근 불가능!
데이터은닉&이름장식
2. 이름 장식 (Name Mangling)
_클래스명__변수명으로 접근가능
class Bom:
__name = ‘Bomin’
>>> b1 = Bom()
>>> b1._Bom__name
Bomin
데이터은닉&이름장식
2. 이름 장식 (Name Mangling)
_클래스명__변수명으로 접근가능
class Bom:
__name = ‘Bomin’
>>> b1 = Bom()
>>> b1._Bom__name
Bomin
그럼 데이터 은닉이
안되는거 아니에요?
데이터은닉&이름장식
2. 이름 장식 (Name Mangling)
_클래스명__변수명으로 접근가능
class Bom:
__name = ‘Bomin’
>>> b1 = Bom()
>>> b1._Bom__name
Bomin
파이썬은 Java나 C++과 다르게 데이터 은닉이 약한 언어입니다.
>>> dir()로 namespace를 확인할 수도 있고
>>> _클래스명_변수명 으로 접근도 가능
@Property
1. Getter, Setter
데이터 은닉, 캡슐화를 위해서 C++, Java에서 사용하는 디자인 패턴
파이썬으로 바꿔 볼까요?
@Property
2. Property 클래스 활용
좀 복잡한데… 다른방법 없나요?
@Property
3. @Property 활용
함수 이름이 property
attribute와 fget으로 설정
@Property
근데 이거 왜쓴다고 했죠?
데이터 은닉, 캡슐화
@Property
어차피 은닉 안되는데
왜 쓰는거에요?
파이썬은 Java나 C++과 다르게 데이터 은닉이 약한 언어입니다.
>>> dir()로 namespace를 확인할 수도 있고
>>> _클래스명_변수명 으로 접근도 가능
@Property
음…사실 잘 안써요..
@Property
4. 악의적인 입력 예방 (은근 중요하긴합니다)
입력되는 값의 범위를 정할수 있다
상속
1. 상속이란?
Base Class
Derived Class
Base Class : 부모 클래스, 물려줄 속성과 메소드 정의
Derived Class : 자식클래스, 부모로부터 속성과 메소드 물려받음
클래스마다 동일한 코드 작성되는 것 방지
부모에 공통된 속성을 두어 코드 유지보수 용이하게함
상속
1. 예제
상속
2. 속성확인, 부모클래스 확인
__dict__ : 인스턴스의 속성을 사전 객체로 관리
__base__ : 클래스의 부모클래스 출력
issubclass( 자식클래스, 부모클래스 ) : 두 클래스의 상속관계 확인
상속
3. 부모 클래스의 생성자 호출
부모클래스이름.__init__(self, var…)
super(자식클래스이름, self).__init__(var…)
Developer
PythonDeveloper JavaDeveloper
CPPDeveloper
상속
4. 메소드 재정의 ( Method Overriding )
부모클래스의 함수를 자식클래스에서 재정의해서 사용하는 것
부모클래스의 함수와 자식클래스의 함수의 이름만 같으면 됩니다!
메소드의 재정의로 다형성 구현
Developer
coding()
PythonDeveloper
coding()
JavaDeveloper
coding()
CPPDeveloper
coding()
상속
3,4 예제
상속
5. 다중 상속 & Mixin 클래스
2개 이상의 클래스를 상속
파이썬에서는 다중 상속이 가능! ( Java는 다중상속 허용x )
Mixin 클래스 : 속성없이 메소드만 정의 되어있는 클래스
Human
WebDeveloper
DeveloperMixin
상속
5. 예제
__class__(instance) : instance의 class 타입확인
상속
6. 다중 상속과 부모클래스
A
D
B C
부모클래스이름.__init__(self, var…)
super(자식클래스이름, self).__init__(var…)
상속
6. 다중 상속과 부모클래스
클래스 A의 생성자가
두번호출되는 문제발생!!!
상속
6. 다중 상속과 부모클래스
A
D
B C
부모클래스이름.__init__(self, var…)
super(자식클래스이름, self).__init__(var…)
상속
6. 다중 상속과 부모클래스
A 클래스 생성자 한번 호출
과제
이번주는 과제가 없어요 ^_^

More Related Content

What's hot

파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
Yong Joon Moon
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
Yong Joon Moon
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
handfoot
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
Yong Joon Moon
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
Yong Joon Moon
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기
Yong Joon Moon
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
Yong Joon Moon
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
handfoot
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
Yong Joon Moon
 
Java class
Java classJava class
Java class
Hyosang Hong
 
Java extends
Java extendsJava extends
Java extends
Hyosang Hong
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
Yong Joon Moon
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
Yong Joon Moon
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
SeongHyun Ahn
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
Hyosang Hong
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
Yong Joon Moon
 
Java inner class
Java inner classJava inner class
Java inner class
Hyosang Hong
 
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
Darion Kim
 

What's hot (19)

파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기파이썬 프로퍼티 디스크립터 이해하기
파이썬 프로퍼티 디스크립터 이해하기
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기
 
파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기파이썬 iterator generator 이해하기
파이썬 iterator generator 이해하기
 
파이썬 함수 이해하기
파이썬 함수 이해하기 파이썬 함수 이해하기
파이썬 함수 이해하기
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
파이썬 파일처리 이해하기
파이썬 파일처리 이해하기파이썬 파일처리 이해하기
파이썬 파일처리 이해하기
 
Java class
Java classJava class
Java class
 
Java extends
Java extendsJava extends
Java extends
 
Jupyter notebook 이해하기
Jupyter notebook 이해하기 Jupyter notebook 이해하기
Jupyter notebook 이해하기
 
파이썬정리 20160130
파이썬정리 20160130파이썬정리 20160130
파이썬정리 20160130
 
파이썬 모듈 패키지
파이썬 모듈 패키지파이썬 모듈 패키지
파이썬 모듈 패키지
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
파이썬 심화
파이썬 심화파이썬 심화
파이썬 심화
 
Java inner class
Java inner classJava inner class
Java inner class
 
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
 

Viewers also liked

Dive into Python Class
Dive into Python ClassDive into Python Class
Dive into Python ClassJim Yeh
 
Python on Rails 2014
Python on Rails 2014Python on Rails 2014
Python on Rails 2014
Albert O'Connor
 
A deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleA deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio module
Saúl Ibarra Corretgé
 
The future of async i/o in Python
The future of async i/o in PythonThe future of async i/o in Python
The future of async i/o in Python
Saúl Ibarra Corretgé
 
Comandos para ubuntu 400 que debes conocer
Comandos para ubuntu 400 que debes conocerComandos para ubuntu 400 que debes conocer
Comandos para ubuntu 400 que debes conocer
Geek Advisor Freddy
 
Python, do you even async?
Python, do you even async?Python, do you even async?
Python, do you even async?
Saúl Ibarra Corretgé
 
Python master class 3
Python master class 3Python master class 3
Python master class 3
Chathuranga Bandara
 
Python Async IO Horizon
Python Async IO HorizonPython Async IO Horizon
Python Async IO Horizon
Lukasz Dobrzanski
 
Practical continuous quality gates for development process
Practical continuous quality gates for development processPractical continuous quality gates for development process
Practical continuous quality gates for development process
Andrii Soldatenko
 
Async Tasks with Django Channels
Async Tasks with Django ChannelsAsync Tasks with Django Channels
Async Tasks with Django Channels
Albert O'Connor
 
The Awesome Python Class Part-4
The Awesome Python Class Part-4The Awesome Python Class Part-4
The Awesome Python Class Part-4
Binay Kumar Ray
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and python
Chetan Giridhar
 
Regexp
RegexpRegexp
Regexp
Ynon Perek
 
What is the best full text search engine for Python?
What is the best full text search engine for Python?What is the best full text search engine for Python?
What is the best full text search engine for Python?
Andrii Soldatenko
 
Python as number crunching code glue
Python as number crunching code gluePython as number crunching code glue
Python as number crunching code glue
Jiahao Chen
 
Building social network with Neo4j and Python
Building social network with Neo4j and PythonBuilding social network with Neo4j and Python
Building social network with Neo4j and Python
Andrii Soldatenko
 
Async Web Frameworks in Python
Async Web Frameworks in PythonAsync Web Frameworks in Python
Async Web Frameworks in Python
Ryan Johnson
 
Escalabilidad horizontal desde las trincheras
Escalabilidad horizontal desde las trincherasEscalabilidad horizontal desde las trincheras
Escalabilidad horizontal desde las trincheras
Saúl Ibarra Corretgé
 
SylkServer: State of the art RTC application server
SylkServer: State of the art RTC application serverSylkServer: State of the art RTC application server
SylkServer: State of the art RTC application server
Saúl Ibarra Corretgé
 

Viewers also liked (20)

Dive into Python Class
Dive into Python ClassDive into Python Class
Dive into Python Class
 
Python on Rails 2014
Python on Rails 2014Python on Rails 2014
Python on Rails 2014
 
Faster Python, FOSDEM
Faster Python, FOSDEMFaster Python, FOSDEM
Faster Python, FOSDEM
 
A deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio moduleA deep dive into PEP-3156 and the new asyncio module
A deep dive into PEP-3156 and the new asyncio module
 
The future of async i/o in Python
The future of async i/o in PythonThe future of async i/o in Python
The future of async i/o in Python
 
Comandos para ubuntu 400 que debes conocer
Comandos para ubuntu 400 que debes conocerComandos para ubuntu 400 que debes conocer
Comandos para ubuntu 400 que debes conocer
 
Python, do you even async?
Python, do you even async?Python, do you even async?
Python, do you even async?
 
Python master class 3
Python master class 3Python master class 3
Python master class 3
 
Python Async IO Horizon
Python Async IO HorizonPython Async IO Horizon
Python Async IO Horizon
 
Practical continuous quality gates for development process
Practical continuous quality gates for development processPractical continuous quality gates for development process
Practical continuous quality gates for development process
 
Async Tasks with Django Channels
Async Tasks with Django ChannelsAsync Tasks with Django Channels
Async Tasks with Django Channels
 
The Awesome Python Class Part-4
The Awesome Python Class Part-4The Awesome Python Class Part-4
The Awesome Python Class Part-4
 
Async programming and python
Async programming and pythonAsync programming and python
Async programming and python
 
Regexp
RegexpRegexp
Regexp
 
What is the best full text search engine for Python?
What is the best full text search engine for Python?What is the best full text search engine for Python?
What is the best full text search engine for Python?
 
Python as number crunching code glue
Python as number crunching code gluePython as number crunching code glue
Python as number crunching code glue
 
Building social network with Neo4j and Python
Building social network with Neo4j and PythonBuilding social network with Neo4j and Python
Building social network with Neo4j and Python
 
Async Web Frameworks in Python
Async Web Frameworks in PythonAsync Web Frameworks in Python
Async Web Frameworks in Python
 
Escalabilidad horizontal desde las trincheras
Escalabilidad horizontal desde las trincherasEscalabilidad horizontal desde las trincheras
Escalabilidad horizontal desde las trincheras
 
SylkServer: State of the art RTC application server
SylkServer: State of the art RTC application serverSylkServer: State of the art RTC application server
SylkServer: State of the art RTC application server
 

Similar to Python class

Python module
Python modulePython module
Python module
건희 김
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
Yeonah Ki
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2
Heejun Kim
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
Hong Hyo Sang
 
[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍MinGeun Park
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
Yong Joon Moon
 
Java_06 상속
Java_06 상속Java_06 상속
Java_06 상속
Hong Hyo Sang
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
quxn6
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
용호 최
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
명준 김
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
jinho park
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
성연 김
 
9 object class
9 object class9 object class
9 object class웅식 전
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
용호 최
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
JinKyoungHeo
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
Yoonwhan Lee
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 

Similar to Python class (20)

Python module
Python modulePython module
Python module
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
Java, android 스터티2
Java, android 스터티2Java, android 스터티2
Java, android 스터티2
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍
 
파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131파이썬+객체지향+이해하기 20160131
파이썬+객체지향+이해하기 20160131
 
파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310파이썬+클래스+구조+이해하기 20160310
파이썬+클래스+구조+이해하기 20160310
 
Java_06 상속
Java_06 상속Java_06 상속
Java_06 상속
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 
이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디이펙티브 C++ 5,6 장 스터디
이펙티브 C++ 5,6 장 스터디
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
 
Api design for c++ pattern
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
 
Api design for c++ ch3 pattern
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
 
Effective c++chapter1 and2
Effective c++chapter1 and2Effective c++chapter1 and2
Effective c++chapter1 and2
 
9 object class
9 object class9 object class
9 object class
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
자바야 놀자 PPT
자바야 놀자 PPT자바야 놀자 PPT
자바야 놀자 PPT
 
PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지PHP에서 객체와 데이터 연결 유지
PHP에서 객체와 데이터 연결 유지
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 

More from 건희 김

Python codelab3
Python codelab3Python codelab3
Python codelab3
건희 김
 
Python codelab2
Python codelab2Python codelab2
Python codelab2
건희 김
 
Python codelab1
Python codelab1Python codelab1
Python codelab1
건희 김
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
건희 김
 
Python datatype
Python datatypePython datatype
Python datatype
건희 김
 
땅울림 파이썬 스터디 intro
땅울림 파이썬 스터디 intro땅울림 파이썬 스터디 intro
땅울림 파이썬 스터디 intro
건희 김
 

More from 건희 김 (6)

Python codelab3
Python codelab3Python codelab3
Python codelab3
 
Python codelab2
Python codelab2Python codelab2
Python codelab2
 
Python codelab1
Python codelab1Python codelab1
Python codelab1
 
Python if loop-function
Python if loop-functionPython if loop-function
Python if loop-function
 
Python datatype
Python datatypePython datatype
Python datatype
 
땅울림 파이썬 스터디 intro
땅울림 파이썬 스터디 intro땅울림 파이썬 스터디 intro
땅울림 파이썬 스터디 intro
 

Python class

  • 1. Python Study Of Landvibe made by 김건희 오늘의 주제 Class의 이해
  • 2. Outline 1. Understanding Class 2. Initialization Function : __init__() 3. Class Variable & Instance Variable 4. Data Hiding & Name Mangling 5. Getter, Setter and @property 6. Inheritance & Mixin & Polymorphism
  • 3. Understanding Class 함수 : 특정 행위에 대해 기술한 소스 코드 클래스 : 특정 행위와 상태를 담을 수 있는 객체를 생성하기 위한 명세서 모듈 : 함수, 클래스 등을 포함하여 독립적인 파일(.py)로 저장하여 언제든지 호 출하여 재사할 수 있는 공통 소스 코드들의 집합 Don’t Repeat Yourself! >>> “같은 소스를 반복해서 작성하지 말라” 소스 재사용
  • 4. Understanding Class 함수 : 특정 행위에 대해 기술한 소스 코드 클래스 : 특정 행위와 상태를 담을 수 있는 객체를 생성하기 위한 명세서 모듈 : 함수, 클래스 등을 포함하여 독립적인 파일(.py)로 저장하여 언제든지 호 출하여 재사할 수 있는 공통 소스 코드들의 집합 Don’t Repeat Yourself! >>> “같은 소스를 반복해서 작성하지 말라” 소스 재사용
  • 5. Understanding Class 특정 행위와 상태를 담을 수 있는 객체를 생성하 기 위한 명세서 1. 클래스의 정의
  • 6. Understanding Class 특정 행위와 상태를 담을 수 있는 객체를 생성하 기 위한 명세서 1. 클래스의 정의 특정 행위 : Method
  • 7. Understanding Class 특정 상태 : Attribute 특정 행위와 상태를 담을 수 있는 객체를 생성하 기 위한 명세서 1. 클래스의 정의 특정 행위 : Method
  • 8. Understanding Class 특정 상태 : Attribute 특정 행위와 상태를 담을 수 있는 객체를 생성하 기 위한 명세서 1. 클래스의 정의 특정 행위 : Method 명세서 : Class Name 클래스의 3요소 : 클래스명, 속성, 메소드
  • 9. Understanding Class Bom은 23살이다 Bom은 인하대학교를 다닌다 Bom은 간수치가 40이다 Bom은 술을 마시면 간수치가 50증가한다 Bom은 휴식을 취하면 간수치가 50떨어진다 1. 클래스의 정의 속성과 행위로 나눈다 속성 : Bom, 23살, 인하대 재학, 간수치40 행위 : 술마시면 간수치 +50, 휴식하면 간수치-50
  • 10. Understanding Class 1. 클래스의 정의 class Bom: name = ‘Bom’ age = 23 univ = “Inha” liver_state = 40 def drink_alcohol(self): liver += 50 print( name, “이가 술을 마십니다”) def rest(self): liver -= 50 print( name, “이가 휴식을 취합니다”) Bom은 23살이다 Bom은 인하대학교를 다닌다 Bom은 간수치가 40이다 Bom은 술을 마시면 간수치가 50증가한다 Bom은 휴식을 취하면 간수치가 50떨어진다 클래스 내부함수의 첫 인자는 self
  • 11. Understanding Class 2. 클래스의 사용 bom = Bom() print(bom.name + ‘은 ’ + bom.univ + ‘대학교에 다닙니다’ ) bom.drink_alcohol() print(bom.liver) bom.rest() print(bom.liver) 변수 = 클래스이름() 변수.속성이름 변수.함수이름() Bom은 Inha대학교에 다닙니다 Bom이가 술을 마십니다 90 Bom이가 휴식을 취합니다 40
  • 12. 초기화 함수 내부에 선 언된 변수에는 self 키 워드가 붙는다 초기화 함수 : __init__() 1. __init___() class Bom: def __init__(self, name, age, univ) print(‘초기화 함수 시작’) self.name = name self.age = age self.univ = univ self.liver_state = 40 def drink_alcohol(self): liver += 50 print( name, “이가 술을 마십니다”) def rest(self): liver -= 50 print( name, “이가 휴식을 취합니다”) C++ 과 Java의 생성자 함수와 같은 역할 클래스가 생성된 직후에 바로 실행된다 클래스 내부함수의 첫 인자는 self
  • 13. 초기화 함수 : __init__() 2. __init___() 사용 yang= Bom(‘양욱’, 20, ’인하’) print(yang.name + ‘은 ’ + bom.univ + ‘대학교에 다닙니다’ ) yang.liver = 50 print(yang.liver) yang.rest() print(yang.liver) 초기화 함수 시작 양욱은 인하대학교에 다닙니다 90 Bom이가 휴식을 취합니다 140
  • 14. 초기화 함수 : __init__() 3. 주의사항 class Bom: self.univ = ‘연세’ def __init__(self, name, age) print(‘초기화 함수 시작’) self.name = name self.age = age self.liver_state=40 __init__함수 밖에 self.변수이름 선언 안됨 class Bom: def __init__(self, name) self.name = name self.age b = Bom(“bom”) print(b.age) 초기화 되지 않은 변수를 참조하면 에러
  • 15. 클래스 변수&인스턴스 변수 1. self class Bom: self.univ = ‘연세’ def __init__(self, name, age, univ) print(‘초기화 함수 시작’) self.name = name self.age = age self.liver_state=40 C++과 Java의 this 키워드와 같은 역할 지금 현재 속해있는 클래스를 참조한다 클래스 내부 함수의 첫 인자는 모두 self class Bom: def __init__(self, name, age, univ) print(‘초기화 함수 시작’) self.name = name self.age = age 여기서 self는 모두 Bom클래스의 주소를 참조한다 초기화 함수 밖에 사용하면 안되는 이유!? 함수의 인자 self를 사용한것!
  • 16. 클래스 변수&인스턴스 변수 2. 클래스 객체와 인스턴스 객체의 namespace class Bom: name = ‘Bomin’ def __init__(self) self.age = 23 >>> b1 = Bom() >>> b1.name = ‘JumBomin name=‘JumBomin’ b1(인스턴스) name=‘Bomin’ Bom(클래스)
  • 17. 클래스 변수&인스턴스 변수 2. 클래스 객체와 인스턴스 객체의 namespace >>> b1 = Bom() >>> b1.name = ‘JumBomin’ >>> b2 = Bom() >>> b1.name JumBomin >>> b2.name Bomin >>> Bom Bomin name=‘JumBomin’ b1(인스턴스) name=‘Bomin’ Bom(클래스) b2(인스턴스)
  • 18. 데이터은닉&이름장식 1. 데이터 은닉 (Data Hiding) 클래스의 내부 변수를 외부에서 접근하지 못하게 숨기는 것 변수의 신뢰도를 높혀준다 캡슐화 (Encapsulation)라고 부르기도 함 어떻게 접근을 못하게할까? class Bom: name = ‘Bomin’ >>> b1 = Bom() >>> b1.name Bomin
  • 19. 데이터은닉&이름장식 2. 이름 장식 (Name Mangling) 변수앞에 __(언더스코어 두개)를 붙혀 클래스 외부에서 접근하지 못하게 한다 어떻게 접근을 못하게할까? class Bom: __name = ‘Bomin’ >>> b1 = Bom() >>> b1.name AttributeError: type object ‘Bom’ has no atrribute ‘name’ >>> b1.__name AttributeError: type object ‘Bom’ has no atrribute ‘__name’
  • 20. 데이터은닉&이름장식 dir(classname) 함수 : classname내부의 namepace출력 ‘_클래스명__변수명 ‘ 으로 namespace가 바뀜 >>> name, __name 접근 불가능!
  • 21. 데이터은닉&이름장식 2. 이름 장식 (Name Mangling) _클래스명__변수명으로 접근가능 class Bom: __name = ‘Bomin’ >>> b1 = Bom() >>> b1._Bom__name Bomin
  • 22. 데이터은닉&이름장식 2. 이름 장식 (Name Mangling) _클래스명__변수명으로 접근가능 class Bom: __name = ‘Bomin’ >>> b1 = Bom() >>> b1._Bom__name Bomin 그럼 데이터 은닉이 안되는거 아니에요?
  • 23. 데이터은닉&이름장식 2. 이름 장식 (Name Mangling) _클래스명__변수명으로 접근가능 class Bom: __name = ‘Bomin’ >>> b1 = Bom() >>> b1._Bom__name Bomin 파이썬은 Java나 C++과 다르게 데이터 은닉이 약한 언어입니다. >>> dir()로 namespace를 확인할 수도 있고 >>> _클래스명_변수명 으로 접근도 가능
  • 24. @Property 1. Getter, Setter 데이터 은닉, 캡슐화를 위해서 C++, Java에서 사용하는 디자인 패턴 파이썬으로 바꿔 볼까요?
  • 25. @Property 2. Property 클래스 활용 좀 복잡한데… 다른방법 없나요?
  • 26. @Property 3. @Property 활용 함수 이름이 property attribute와 fget으로 설정
  • 27. @Property 근데 이거 왜쓴다고 했죠? 데이터 은닉, 캡슐화
  • 28. @Property 어차피 은닉 안되는데 왜 쓰는거에요? 파이썬은 Java나 C++과 다르게 데이터 은닉이 약한 언어입니다. >>> dir()로 namespace를 확인할 수도 있고 >>> _클래스명_변수명 으로 접근도 가능
  • 30. @Property 4. 악의적인 입력 예방 (은근 중요하긴합니다) 입력되는 값의 범위를 정할수 있다
  • 31. 상속 1. 상속이란? Base Class Derived Class Base Class : 부모 클래스, 물려줄 속성과 메소드 정의 Derived Class : 자식클래스, 부모로부터 속성과 메소드 물려받음 클래스마다 동일한 코드 작성되는 것 방지 부모에 공통된 속성을 두어 코드 유지보수 용이하게함
  • 33. 상속 2. 속성확인, 부모클래스 확인 __dict__ : 인스턴스의 속성을 사전 객체로 관리 __base__ : 클래스의 부모클래스 출력 issubclass( 자식클래스, 부모클래스 ) : 두 클래스의 상속관계 확인
  • 34. 상속 3. 부모 클래스의 생성자 호출 부모클래스이름.__init__(self, var…) super(자식클래스이름, self).__init__(var…) Developer PythonDeveloper JavaDeveloper CPPDeveloper
  • 35. 상속 4. 메소드 재정의 ( Method Overriding ) 부모클래스의 함수를 자식클래스에서 재정의해서 사용하는 것 부모클래스의 함수와 자식클래스의 함수의 이름만 같으면 됩니다! 메소드의 재정의로 다형성 구현 Developer coding() PythonDeveloper coding() JavaDeveloper coding() CPPDeveloper coding()
  • 37. 상속 5. 다중 상속 & Mixin 클래스 2개 이상의 클래스를 상속 파이썬에서는 다중 상속이 가능! ( Java는 다중상속 허용x ) Mixin 클래스 : 속성없이 메소드만 정의 되어있는 클래스 Human WebDeveloper DeveloperMixin
  • 38. 상속 5. 예제 __class__(instance) : instance의 class 타입확인
  • 39. 상속 6. 다중 상속과 부모클래스 A D B C 부모클래스이름.__init__(self, var…) super(자식클래스이름, self).__init__(var…)
  • 40. 상속 6. 다중 상속과 부모클래스 클래스 A의 생성자가 두번호출되는 문제발생!!!
  • 41. 상속 6. 다중 상속과 부모클래스 A D B C 부모클래스이름.__init__(self, var…) super(자식클래스이름, self).__init__(var…)
  • 42. 상속 6. 다중 상속과 부모클래스 A 클래스 생성자 한번 호출