01.Python 기초 - 클래스(Class)

ID짱재·2021년 2월 6일
1

Python

목록 보기
6/39
post-thumbnail

🌈 클래스와 객체

🔥 클래스와 객체의 개념

🔥 클래스의 생성자

🔥 클래스 상속

🔥 메서드오버라이딩


1. 클래스와 객체의 개념

  • 클래스가 붕어빵을 만드는 붕어빵 틀이라면, 객체는 붕어빵틀로 만든 붕어빵
  • 즉, 클래스는 무언가를 계속해서 만들어 낼 수 있는 설계도이고, 객체는 클래스로 만든 피조물을 뜻함
  • 동일한 클래스로 만든 객체들은 서로 전혀 영향을 주지 않음

✍🏻 python

#가장 기본적인 형태의 class
class Fish_bread:
    pass
a = Fish_bread() # a는 객체, a는 Fish_bread의 인스턴스
b = Fish_bread() # b는 객체, b는 Fish_bread의 인스턴스
# 사칙연산 Class 만들어보기 : 생성자 없는 version(setdata)
class FourCal:
    def setdata(self, first, second):
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result
a = FourCal()
a.setdata(4,2)
print(a.add()) # 6

2) 클래스의 생성자

  • 객체에 setdata와 같은 메서드를 호출하여 초기값 설정할 수 있으나, 이는 번거로움
  • 이를 개선하기 위해 객체가 생성될 때 자동으로 호출되게하는 생성자를 지정해 사용함
  • 메서드 이름으로 __init__을 이용해 생성자를 만들 수 있음

✍🏻 python

# 사칙연산 Class 만들어보기 : 생성자 메서드(__init__)
class FourCal:
    def __init__(self, first, second): # 객체가 생성되면 자동으로 생성자 호출
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result
a = FourCal(4,2) # 4,2를 값으로 객체 a를 생성
print(a.first) # 4
print(a.second) # 2
print(a.add()) # 6
print(a.div()) # 2.0
print(a.mul()) # 8
print(a.sub()) # 2

3. 클래스 상속

  • 클래스는 새로 클래스를 만들 때, 이전에 만들어 두었던 클래스의 기능을 상속받아 사용할 수 잇음
  • 기존 클래스를 수정하거나 추가하면되는데 상속하는 이유는 종종 라이브러리 형태로 제공되거나 기존 클래스 변경을 하면 안될 경우가 있기 때문

✍🏻 python

# 사칙연산 Class 만들어보기
class FourCal:
    def __init__(self, first, second): # 객체가 생성되면 자동으로 생성자 호출
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result
#
# FourCal 클래스를 새로 생성한 MoreFourCal 클래스에 상속
# 기존 FourCal 클래스의 모든 기능을 사용할 수 있음
class MoreFourCal(FourCal): 
    pass
a = MoreFourCal(10,2)
print(a.add()) # 12
print(a.div()) # 5.0
print(a.mul()) # 20
print(a.sub()) # 8
  • 상속 받은 MoreFourCal 클래스에 제곱 기능 추가하기

✍🏻 python

# 사칙연산 Class 만들어보기
class FourCal:
    def __init__(self, first, second): # 객체가 생성되면 자동으로 생성자 호출
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result
#
# 제곱 기능 추가 : 생성자(__init__)까지 상속해 오기 때문에 생성자 선언할 필요 없음
class MoreFourCal(FourCal): 
    def pow(self):
        result = self.first ** self.second
        return result
a = MoreFourCal(10,2)
print(a.add()) # 12
print(a.div()) # 5.0
print(a.mul()) # 20
print(a.sub()) # 8
print(a.pow()) # 100

4. 메서드 오버라이딩

  • 자식 클래스에서 부모 클래스와 동일한 메서드명을 가지고 다른 기능을 수행해야 하게 할 때
  • 즉, 부모 클래스로부터 상속된 메서드를 자식 클래스에서 새롭게 정의할 때 메서드 오버라이딩 사용
  • 이처럼 동일한 이름으로 메서드를 덮어쓰기하는 것을 메서드오버라이딩라고 함

✍🏻 python

# 사칙연산 Class 만들어보기
class FourCal:
    def __init__(self, first, second): # 객체가 생성되면 자동으로 생성자 호출
        self.first = first
        self.second = second
    def add(self):
        result = self.first + self.second
        return result
    def mul(self):
        result = self.first * self.second
        return result
    def sub(self):
        result = self.first - self.second
        return result
    def div(self):
        result = self.first / self.second
        return result
#
# 메서드 오버라이딩
# 똑같은 div란 메서드를 이용하는데 0으로 나눠도 오류가 안뜨게끔 메서드 수정
class SafeFourCal(FourCal): 
    def div(self):
        if self.second == 0:
            return 0
        else:
            return self.first / self.second
a = SafeFourCal(10,0)
print(a.div()) # 0 
profile
Keep Going, Keep Coding!

0개의 댓글