[파이썬 Python] 객체지향 프로그래밍

2020. 12. 18. 02:31python/초급 파이썬

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가 인스턴스를 가르킬수 있는 성질. 

반응형