이전 장에서 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