[Zero-base 데이터분석] Python중급_클래스(Class)

박지은·2023년 10월 1일
post-thumbnail

1. 클래스 상속

◾ 클래스는 또 다른 클래스의 모든 기능을 상속하여 사용 가능!!
◾ calss 변수명(상속하는 class) 작성하면 상속 완료
class NormalCar:
    def drive(self):
        print('[Normal Car] drive() called!!')
        
    def back(self):
        print('[Normal Car] back() called!!')
        
        
class TurboCar(NormalCar):   # 상속하는 하는 클래스 명을 ()안에 작성
    def turbo(self):
        print('[TurboCar] turbo() called!!')

myTurbo = TurboCar()
myTurbo.turbo()
myTurbo.drive()
myTurbo.back()
----------------------------------------------------------------
[TurboCar] turbo() called!!
[Normal Car] drive() called!!
[Normal Car] back() called!!
📌 class 다중 상속 가능!!
class Car02:
    def turbo(self):
        print('turbo() method called!!')

class Car03:
    def fly(self):
        print('fly() method called!!')

class Car(Car01, Car02, Car03):  # ',' 이용하여 다중 상속 가능
    def __init__(self):
        pass

myCar = Car()
myCar.drive()
myCar.turbo()
myCar.fly()
-------------------------------------------
drive() method called!!
turbo() method called!!
fly() method called!!

2. 생성자

◾ 객체가 생성될 때 생성자를 호출하면 __init()<가 자동 호출
◾ cal = Calculaotr() → Calculaotr() 생성자 호출 → Calculaotr __init__
() 호출
class Calculator:

    def __init__(self):
        print('[Calculator] __init__() called!!')

cal = Calculator()
---------------------------------------------------
[Calculator] __init__() called!!
📌 상위 클래스의 속성을 초기화하기 위해서 __init__ 또는 super() 이용
class P_Class:

    def __init__(self, pNum1, pNum2):
        print('[P_Class] __init__() Called!!')

        self.pNum1 = pNum1
        self.pNum2 = pNum2

# __init__사용
class C_Class(P_Class):

    def __init__(self, cNum1, cNum2):
        print('[C_Class] __init__() Called!!')

        P_Class.__init__(self, cNum1, cNum2)

        self.cNum1 = cNum1
        self.cNum2 = cNum2
        
# super()사용
class C_Class(P_Class):

    def __init__(self, cNum1, cNum2):
        print('[C_Class] __init__() Called!!')

        super().__init__(cNum1, cNum2)

        self.cNum1 = cNum1
        self.cNum2 = cNum2
        
cls = C_Class(10, 20)
print(f'cal.num1 : {cls.cNum1}')
print(f'cal.num2 : {cls.cNum2}')
---------------------------------------------------
[C_Class] __init__() Called!!
[P_Class] __init__() Called!!
cal.num1 : 10
cal.num2 : 20

3. 오버라이딩

◾ 오버라이딩 : 하위 클래스에서 상위 클래스의 메서드를 재정의
class Robot:

    def __init__(self, c, h, w):
        self.color = c
        self.height = h
        self.weight = w

    def fire(self):
        print('미사일 발사')

class NewRobot(Robot):

    def __init__(self, c, h, w):
        super().__init__(c, h, w)
        
    def fire(self):
        print('레이저 발사')
        
myRobot = NewRobot('red', 200, 300)
myRobot.fire()
----------------------------------------------------------------
레이저 발사

4. 추상 클래스

◾ 상위 클래스에서 하위 클래스에 메서드 구현을 강조
from abc import  ABCMeta             # import ABCMeta, abstractmethod 필수
from abc import abstractmethod

class AirPlane(metaclass=ABCMeta):

    @abstractmethod
    def flight(self):
        pass

    def foward(self):
        print('전진')

class Airliner(AirPlane):

    def __init__(self,c):
        self.color = c

    def flight(self):
        print('시속 400km/h 비행')


al = Airliner('red')
al.flight()
al.foward()
-----------------------------------------------------
시속 400km/h 비행
전진
profile
예비 분석가

0개의 댓글