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

PPTX
파이썬 class 및 function namespace 이해하기
PPTX
파이썬 Special method 이해하기
PPTX
파이썬 Xml 이해하기
PPTX
파이썬 xml 이해하기
PPTX
파이썬 namespace Binding 이해하기
PPTX
파이썬 객체 클래스 이해하기
PDF
Scala type class pattern
PPTX
파이썬 Descriptor이해하기 20160403
파이썬 class 및 function namespace 이해하기
파이썬 Special method 이해하기
파이썬 Xml 이해하기
파이썬 xml 이해하기
파이썬 namespace Binding 이해하기
파이썬 객체 클래스 이해하기
Scala type class pattern
파이썬 Descriptor이해하기 20160403

What's hot (19)

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

Viewers also liked (20)

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

Similar to Python class (20)

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

More from 건희 김 (6)

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