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 (19)

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

Viewers also liked (20)

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

Similar to Python class (20)

PPTX
파이썬+클래스+구조+이해하기 20160310
Yong Joon Moon
 
PDF
[PyCon Korea 2019] 파이썬의 변수
Insuk (Chris) Cho
 
PPTX
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
PDF
스칼라 클래스 이해하기 _Scala class understanding
Yong Joon Moon
 
PPTX
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
PDF
Python Programming: Class and Object Oriented Programming
Chan Shik Lim
 
PDF
Effective Python
SEMINARGROOT
 
PPT
Python class
Herren
 
PDF
Light Tutorial Python
Kwangyoun Jung
 
PPTX
파이썬 둘째날
명준 김
 
PDF
Effective c++ chapter5 6_ 131039 신동찬
Dong Chan Shin
 
PPTX
Effective c++ 3
현찬 양
 
PPTX
Chapter5 ~ 6
Injae Lee
 
PPTX
이펙티브 C++ 5,6 장 스터디
quxn6
 
PPTX
Swift3 : class and struct(+property+method)
승욱 정
 
PDF
Architecture patterns with python (1)
동환 김
 
PPTX
Effective cpp
TonyCms
 
PDF
08장 객체와 클래스 (기본)
유석 남
 
PPTX
Effective c++(chapter 5,6)
문익 장
 
PDF
Scala namespace scope
Yong Joon Moon
 
파이썬+클래스+구조+이해하기 20160310
Yong Joon Moon
 
[PyCon Korea 2019] 파이썬의 변수
Insuk (Chris) Cho
 
파이썬+객체지향+이해하기 20160131
Yong Joon Moon
 
스칼라 클래스 이해하기 _Scala class understanding
Yong Joon Moon
 
파이썬+주요+용어+정리 20160304
Yong Joon Moon
 
Python Programming: Class and Object Oriented Programming
Chan Shik Lim
 
Effective Python
SEMINARGROOT
 
Python class
Herren
 
Light Tutorial Python
Kwangyoun Jung
 
파이썬 둘째날
명준 김
 
Effective c++ chapter5 6_ 131039 신동찬
Dong Chan Shin
 
Effective c++ 3
현찬 양
 
Chapter5 ~ 6
Injae Lee
 
이펙티브 C++ 5,6 장 스터디
quxn6
 
Swift3 : class and struct(+property+method)
승욱 정
 
Architecture patterns with python (1)
동환 김
 
Effective cpp
TonyCms
 
08장 객체와 클래스 (기본)
유석 남
 
Effective c++(chapter 5,6)
문익 장
 
Scala namespace scope
Yong Joon Moon
 
Ad

More from 건희 김 (7)

PDF
Python codelab3
건희 김
 
PDF
Python codelab2
건희 김
 
PDF
Python codelab1
건희 김
 
PDF
Python module
건희 김
 
PDF
Python if loop-function
건희 김
 
PPTX
Python datatype
건희 김
 
PPTX
땅울림 파이썬 스터디 intro
건희 김
 
Python codelab3
건희 김
 
Python codelab2
건희 김
 
Python codelab1
건희 김
 
Python module
건희 김
 
Python if loop-function
건희 김
 
Python datatype
건희 김
 
땅울림 파이썬 스터디 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 클래스 생성자 한번 호출