Chapter 6. 함수 기초 (2)

어제 너무 아파서 공부를 못했다.. 하지만 진짜 5일째 되는 날 @_@
무슨 일이 있었냐는 듯 약간의 두통만 남긴채 말짱해졌댜
이번 주말에는 밀린 과제도 하고 했던 프로젝트 올리규 쉬어야지 매일매일 인공지능,데이터 공부하는거 습관 들여야한다 !
화이띵화이띵 ~~~ >-<

6.3 클래스

6.3.1 객체

  • 객체 : 변수(멤버)와 함수(메서드)가 뭉쳐서 정리된 물건
##클래스의 예
mylist = [1,10,2,20]
mylist.sort()
print(mylist)
##함수로 전달하여 처리 결과를 표시할 수 있다. 

클래스 설계 시 정의 3요소 :
생성자, 메서드, 멤버

  • (1) 생성자 (constructor) :
    클래스를 만들 때 자동으로 호출되는 특수 함수
    파이썬에서는 이름을 _init__
    첫번째 인수로 객체 자신을 의미하는 self라는 특수 변수를 가짐
  • (2) 메서드(method) :
    클래스가 갖는 처리(함수)
    인스턴스를 조작하는 인스턴스 메서드, 클래스 전체를 처리하는 클래스 메서드, 인스턴스 없이도 실행할 수 있는 정적 메서드 존재 (인스턴스 메서드, 클래스 메서드, 정적 메서드)
  • (3) 멤버(member) :
    클래스가 가지는 값(변수), 다른 객체 지향 언어는 퍼블릭과 프라이빗으로 이루어져 있는 반면, 파이썬은 모두 퍼블릭 멤버로 처리, 접근 제한은 프로퍼티(property)로 제한

6.3.2 클래스(멤버와 생성자)

  • 객체의 구조를 설계하는 설계도, 클래스

    ex)
    객체의 내용 :
    --상품
    멤버 :
    --상품명ㅣname
    --가격 | price
    --재고 | stock
    --매출 | sales

##클래스의 예(1) 
#MyProduct 클래스 정의
class MyProduct:

##생성자 정의 
def __init__(self,name,price) :
 #인수를 멤버에 저장
   self.name = name
   self.price = stock
   self.stock = 0
   self.sales = 0

클래스를 호출해야한다.

#MyProduct를 호출하여 객체 product1을 만듦
product1 = MyProduct("cake",500)
##name = "cake", price = 500으로 생성자 작동, 
각 인수에 의해 멤버 name과 price초기화

##MyProduct 클래스의 생성자를 수정하여 클래스 호출시
name,price, stock의 초깃값을 설정해라. 아래의 인수명은 다음과 같다. (상품명 : name ,가격 : price, 재고 : stock)

#클래스를 정의한다.
class MyProduct :
#생성자를 수정한다.
  def __init__(self,name,price,stock) :
 #인수를 멤버에 저장한다.
    self.name = name
    self.price = price
    self.stock = stock
    self.sales = 0
#MyPrduct를 호출하여 객체 product_1을 만든다.
product_1 = MyProduct("cake",500,20)
#product_1의 stock을 출력하세요
print(product_1.stock)

6.3.3 메서드

  • 메서드
    --상품을 n개 구매하고, 재고를 갱신 : buy_up(n)
    --상품을 n개 판매하고, 재고와 매출을 갱신 : sell(n)
    --상품의 개요를 출력 : summary()
    위의 클래스에 다음과 같은 3가지의 메서드 추가
class MyProudct:
   def __init__(self,name, price, stock) :
       self.name = name
       self.price = price
       self.stock = stock
       self.sales = 0
   #구매 메서드 추가
   def buy_up(self,n) :
       self.stock +=n
   #판매 메서드 추가 
   def sell(self,n) :
       self.stock-=n
       self.sales +=n*self.price
  #개요 메서드 추가 
  def summary(self):
    message = "called summar().\n name : " + \self.name + "\n price: " + str(self.price) + \"\n stock : " + str(self.stock) + \"\n sales ": + str(self.sales)
  
    print(message)

MyProduct 클래스에 다음 메서드 추가
--name의 값을 취득해서 반환
-- price를 n만큼 낮춤
-- product_2의 price를 5000만큼 낮추고 summary() 메서드로 요약 정보 출력

class MyProduct :
   def __init__(self, name, price, stock) :
       self.name = name
       self.price = price
       self.stock = stock
       self.sales = 0
   def buy_up(self, n) :
       self.stock +=n
   def sell(self,n) :
       self.stock-=n
       self.sales +=n+self.price
   #개요메서드 생략
   def get_name() :
      return self.name
   def discount(self,n) :
      self.price -=n
      
product_2 = MyProduct("phone",30000,100)
product_2.discount(5000)
#product2의 summary출력
product_2.summary()
                   

6.3.4 클래스(상속, 오버라이드, 슈퍼)

  • 다른 사람이 만든 클래스에 기능을 추가하고 싶을 때, 상속
  • 상속 : 기존의 클래스를 바탕으로 메서드나 멤버를 추가하거나 일부만 변경하여 새로운 클래스를 만듦
  • 바탕 : 부모클래스, 슈퍼클래스, 기저클래스
  • 새로 만든 클래스 : 자식클래스, 서브클래스, 파생 클래스
  • 자식클래스:
    -- 부모 클래스의 메서드와 멤버를 그대로 사용
    --부모 클래스의 메서드와 멤버를 덮어쓴다.(오버라이드)
    --자기자신의 메서드와 멤버를 자유롭게 추가
    --자식 클래스에서 부모 클래스의 메서드와 멤버를 호출(수퍼)

    MyProduc를 상속하여 10% 소비세를 적용한 MyProductSalesTax 만들기

##클래스 상속의 예 
#MyProduct 클래스를 상속하는 MyProductSalesTax 정의
class MyProductSalesTax (MyProduct) : 
    #MyProductSalesTax는 생성자의 네 번째 인수가 소비세율을 받는다.
    
    def__init__(self,name,price,stock,tax_rate) :
       #super를 사용하면 부모클래스의 메서드를 호출 가능
       super().__init__(name,price,stock)
       self.tax_rate = tax_rate
       
    #MyProductSalesTax에서 MyProduct의 get_name을 
    재정의(오버라이드_떺어쓰기)
    def get_name(self) :
    return self.name + "(소비세포함)"
    
    
    #MyProductSalesTax에서 get_price_with_tax를 새로 구현
    def get_price_with_tax(self) :
    return int(self.price *(1 + self.tax_rate))
    

##MyProduct의 summary() 메서드를 재정의(오버라이드)하여 summary가 소비세를 포함한 가격을 출력하도록 만들어라.

class MyProduct : 
  def__init__(self,name,price,stock) :
    self.name = name
    self.price = price
    self.stock = stock
    self.sales = 0
    
  def summary(self):
    message = "called summar().\n name : " + \self.name + "\n price: " + str(self.price) + \"\n stock : " + str(self.stock) + \"\n sales ": + str(self.sales)
  
    print(message)
    
   def get_name(self) :
     return self.name
   
   def discount(self,n) :
      self.price-=n 
      
   class MyProductSalesTax(MyProduct) :
   #MyProduct의 네번째인수가 소비세율을 받음
      def__init(self,name,price,stock,tax_rate):
         super().__init__(name,price,stock)
         self.tax_rate = tax_rate
         
   #MyProductSalesTax에서 MyProduct의 get_name을 오버라이드
   def get_name(self) :
    return self.name + "(소비세포함)"
    
   #MyProductSalesTax에 get_price_with_tax를 새로 구현
   def get_price_with_tax(self) :
     return int(self.price*(1+self.tax_rate))
     
   #MyProductSalesTax에 summary메서드 제정의하고 summary
   가 소비세를 포함한 가격을 출력하도록 만들어라.
    def summary(self):
    message = "called summar().\n name : " + \self.name + "\n price: " + str(self.get_price_with_tax()+0) + \"\n stock : " + str(self.stock) + \"\n sales ": + str(self.sales)
    print(message)
       

6.4 문자열 포맷 지정

  • %d : 정수로 표시
  • %f : 소수로 표시
  • %.2f : 소수점 이하 두 자리까지 표시
  • %s : 문자열로 표시

좋은 웹페이지 즐겨찾기