[파이썬 Python] 객체지향 프로그래밍
2020. 12. 18. 02:31ㆍpython/초급 파이썬
728x90
반응형
*티스토리 코드블럭이 이상해서 code block indentation이 밀려있다
객체 지향 프로그래밍의 4가지
- 추상화(Abstraction)
- 캡슐화(Encapsulation)
- 상속(Inheritance)
- 다형성(Polymorphism)
1. 추상화
Abstraction
- 클래스나 함수의 기능, 설명을 (""" or ''')사이에 주석처럼 적어주는 것이다.
- 보통 """ 쌍따옴표 3개를 사용한다.
- help(클래스 이름) 을 통해 도큐멘테이션(작성한 docstring)을 모아서 볼수 있다.
classs xxx:
"""docstring"""
def yyy:
"""docstring"""
python 3.5 부터 type hinting 가능하다.
def market_cap(self, price: int, number: int): -> int:
return price*number
2. 캡슐화
Encapsulation
- 객체 내용을 외부로부터 엑세스 차단
- 객체를 getter setter 메소드를 통해서만 접근 가능하게 한다.
(getter 는 값을 받아온다 / setter 는 값을 설정한다.)
변수나 함수 앞에 언더바 두개(__) 를 붙이면 클래스 밖에서 호출이 불가능하다.
__market_cap
__price
- __ 를 붙인다고 파이썬에서 완벽한 캡슐화가 되지 않는다. 언더바(밑줄) 두개 붙인 메소드는 새로운 이름을 갖게 되는데, 그 새 이름으로 클래스 밖에서 접근이 가능하다.
- print(dir(인스턴스)) 로 확인 가능하다.
- 파이썬에서는 _ 언더바(밑줄) 1개를 붙여 클래스 외부에서 사용하지 말라는 경고표시를 약속으로 한다.
3. 상속
Inheritance
- 자식 class 에서 중복되는(공통부문) 코드를 부모 class 에 한번만 작성 할 수 있다.
- class이름.mro() 로 상속하는 부모 클래스를 볼 수 있다. mro 에 나오는 순서대로 탐색을 한다.
class Market:
def __init__(self):
pass
def market_cap:
pass
class Kospi(Market):
pass
#상속할 부모 class Market을 () 사이에 넣는다
티스토리 코드블럭이 이상해서 indentation이 밀려있다
오버라이딩
class Market:
def __init__(self, name, price):
self.name = name
self.price = price
def market_cap:
pass
class Kospi(Market):
def __init__(self, name, price, number_of_share):
self.name = name
self.price = price
self.num_of_share = number_of_share
#상속할 부모 class Market을 () 사이에 넣는다
↓
super().__init__ 으로 중복되는 것을 줄일 수 있다
class Market:
def __init__(self, name, price):
self.name = name
self.price = price
def market_cap:
pass
class Kospi(Market):
def __init__(self, name, price, number_of_share):
super().__init__(name, price)
self.num_of_share = number_of_share
#상속할 부모 class Market을 () 사이에 넣는다
다중상속
부모 클래스(parent class)를 참조할 때의 애매함 때문에 다중 상속을 되도록이면 하지 않는 것이 좋다.
class KospiKosdq(Kospi, Kosdaq)
def __init_(slef, buy_kosp, buy_kosdaq )
Kospi.__init__(self, buy_kospi)
Kosdaq.__init__(self, buy_kosdaq)
4. 다형성
Polymorphism
하나의 변수가 서로다른 클래스 A, B가 인스턴스를 가르킬수 있는 성질.
반응형
'python > 초급 파이썬' 카테고리의 다른 글
[파이썬 Python] 모듈(module) 과 패키지(package) (0) | 2020.12.20 |
---|---|
[파이썬 Python] 클래스 메서드 @classmethod (0) | 2020.12.17 |
[파이썬 Python] 데코레이터 @decorator (0) | 2020.12.17 |
[파이썬 Python] __str__ (0) | 2020.12.17 |
[파이썬 Python] __init__ (0) | 2020.12.17 |