본문 바로가기
BIG DATA STUDY/Python

파이썬 배우기 #7

by StrongRiver 2022. 1. 14.
728x90
반응형

객체 지향 프로그래밍

클래스, 객체, 인스턴스

  • 클래스 : 객체를 설계하는 설계도 역할
  • 객체 : 실질적인 물건 또는 개념, 속성(변수)과 행동(함수)으로 구성된다.
  • 인스턴스 : 클래스를 사용하여 실제로 만들어진 것

비유하자면, **클래스**는 일정한 모양을 가진 **''붕어빵 틀''**이라고 할 수 있다. **객체/인스턴스****붕어빵틀에 찍어낸 ''붕어빵''**이다. 형태는 일정하지만 내부에 팥이 들어있을 수도, 슈크림이 들어있을 수 있듯, 다양한 종류가 있다.

  • 함수만으로는 작성 시, 객체가 여러개일 경우 대응이 어렵기 때문에 클래스로 작성한다.

클래스의 정의

class Calc:
    
    def setData(self,first, second):
        self.first = first
        self.second = second
        
    def add(self):
        return self.first +self.second
  • 클래스 내부에 있는 함수는 method라고 부른다.
  • 객체변수 / 클래스변수로 구분
  • self를 사용하여 클래스 내부에서 사용되는 지역변수로 선언한다.(영역 구분)
  • 예시
  • class Calc:
        
        def setData(self,first, second):
            self.first = first
            self.second = second
            
        def add(self):
            return self.first +self.second
    
        def sub(self):
          return self.first - self.second
    
        def mul(self):
          return self.first * self.second
    
        def div(self):
          return self.first / self.second
    
    calc =Calc()
    calc.setData(4,2)
    calc.add()
    calc.sub()

생성자(constructor), 변수

  • 생성자 '_'가 있는 함수는 자동으로 나타나는 특수한 함수
class Calc:
    def __init__(self,first,second):  
      self.first = first
      self.second = second 
    
    def setData(self,first, second):
        self.first = first
        self.second = second
        
    def add(self):
        return self.first +self.second

    def sub(self):
      return self.first - self.second

    def mul(self):
      return self.first * self.second

    def div(self):
      return self.first / self.second

상속

  • 다른 클래스로부터 동일한 내용을 가져오는 것
class childcalc(Calc):
  pass

c = childcalc(4,2)
c.add()
#출력값 6
#위에서 선언한 클래스를 상속받아 값을 나타낸다.
  • Calc클래스의 내용을 상속받아 pow라는 함수를 추가한다.
class childcalc(Calc):
  def pow(self):
    return self.first**self.second


c = childcalc(4,2)
c.pow()
#출력값 16
  • 부모클래스에서 발생하는 오류를 자식 클래스에서 수정하는 방법

예) 위 부모클래스의 div는 0으로 나눌때 에러가 발생한다. 이를 해결하는 safecalc라는 자식클래스

class safecalc(Calc):
  def div(self):
    if self.second == 0:
        return print('0으로는 나눌 수 없습니다.')
    else:
        return self.first/self.second

연습하기

  • Human 이라는 비어있는 클래스 만들기
class Human:
  pass
  • baby 라는 이름의 객체 만들기
baby= Human()
  • 객체를 만들자마자 '문장'이 나오도록 만들기
class Human():
    def __init__(self):
        print('객체 탄생!')
#생성자(constructor) 활용하기
  • 이름, 나이 성별을 가지는 Human클래스를 만들기
class Human():
    def __init__(self,name,age,sex):
        print('객체 탄생!')
        self.name = name
        self.age = age
        self.sex = sex
        
c=Human('철수',30,'man')
  • Human 클래스에 객체의 정보를 얻는 getinfo 함수 만들기
#Human 클래스에 객체의 정보를 얻는 getinfo 함수 만들기
class Human():
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def getinfo(self):
      print(f'name:{self.name}, age:{self.age}, sex:{self.sex}')
    
    
c=Human('철수',100,'man')
  • 개인정보를 설정하는 함수 setinfo() 만들기
#개인정보를 설정하는 함수 setinfo() 만들기
class Human2():
    def __init__(self,name='이름',age='나이',sex='성별'):
        self.name = name
        self.age = age
        self.sex = sex

    def getinfo(self):
      print(f'name:{self.name}, age:{self.age}, sex:{self.sex}')

    def setinfo(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
  • Car 클래스 만들기 & Car 클래스를 상속 받는 truck 클래스 만들기 *주의사항 부모 클래스에 있는 객체변수를 자식 클래스에서 사용시에는 반드시 변수 초기화를 해줘야한다.
#Car 클래스 만들기
class Car:
  def __init__(self, wheel, engine):
    self.wheel = wheel
    self.engine = engine

myCar =Car(4,'2000cc')

#Car클래스를  상속해서 Truck클래스 만들기
class Truck(Car):
  def __init__(self, wheel, engine, luggage):
    super().__init__(wheel, engine) 
	#부모클래스의 객체변수를 가지고 오는 생성자 'super().__init__()
    self.luggage=luggage
    

 

728x90
반응형

댓글