회원가입

6. [상속] 상속 II (오버라이딩)

NULL 2021-10-11

이전 장에서 Cashier 클래스와 DeliveryMan 클래스가 Employee 클래스를 상속 받도록 했다.

그런데 지금 자식 클래스부모 클래스의 변수와 메서드를 물려 받기만 했다.

 

이렇게 된다면 Cashier 클래스와 DeliveryMan 클래스를 제대로 사용할 수 없다.

둘 다 물려받은 내용이 같아서 두 클래스 사이에 차이가 없기 때문이다.

 

물려 받은 클래스를 Cashier 클래스와 DeliveryMan 클래스에 맞게 각각 바꿔줘야 한다.

부모 클래스로부터 물려 받은 내용을 자식 클래스가 자신에 맞게 변경하는 걸 오버라이딩 이라고 한다.

오버라이딩 은 우리말로 덮어쓴다는 뜻이다.

부모로부터 물려받은 걸 자기에 맞게 덮어써서 수정한다는 뜻이다.

 

Cashier 클래스에서 오버라이딩 을 한번 해보자.

Cashier 클래스에서 __init__ 메서드오버라이딩 해보자.

class Cashier(Employee):
    """계산대 직원 클래스"""
    # 햄버거 가격
    burger_price = 4000

    def __init__(self, name, wage, number_sold=0):
        super().__init__(name, wage)
        self.number_sold = number_sold

super 함수를 이용하면 된다.

super 라는 함수로 부모 클래스메서드를 호출할 수 있다.

 

이번에는 __str__ 메서드오버라이딩 해보자.

class Cashier(Employee):
    """계산대 직원 클래스"""
    # 햄버거 가격
    burger_price = 4000

    def __init__(self, name, wage, number_sold=0):
        super().__init__(name, wage)
        self.number_sold = number_sold

    def __str__(self):
        return Cashier.company_name + " 계산대 직원: " + self.name

 

이제 변수를 오버라이딩 해보자.

변수를 오버라이딩 하는 것은 그냥 자식 클래스에도 똑같은 이름의 변수를 두고 다른 값을 넣으면 된다.

class Cashier(Employee):
    """계산대 직원 클래스"""
    # 햄버거 가격
    burger_price = 4000
    raise_percentage = 1.05

    def __init__(self, name, wage, number_sold=0):
        super().__init__(name, wage)
        self.number_sold = number_sold

    def __str__(self):
        return Cashier.company_name + " 계산대 직원: " + self.name
0 0