method override
- 부모 클래스의 method를 재정의(override)
- 하위 클래스(자식 클래스) 의 인스턴스로 호출시, 재정의된 메소드가 호출됨
class person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print('{}은 {}을 먹습니다.'.format(self.name, food))
def sleep(self, minute):
print('{}은 {}분 동안 잡니다.'.format(self.name, minute))
def work(self, minute):
print('{}은 {}분 동안 일합니다.'.format(self.name, minute))
class student(person): # person이기도 하기때문에 기본적인 것을 상속받을 수 있다.
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute): ##### method override ####
print('{}은 {}분 동안 뒤지게 공부합니다.'.format(self.name, minute))
class employee(person):
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute): ##### method override ####
print('{}은 {}분 동안 노예마냥 일합니다.'.format(self.name, minute))
son = student('Sonny', 30) # 학생으로 인스턴스를 만들어도 상속받았기 때문에 작동한다.
son.eat('BBQ')
son.sleep(30)
son.work(60)
son = employee('Sonny', 30) # 학생으로 인스턴스를 만들어도 상속받았기 때문에 작동한다.
son.eat('BBQ')
son.sleep(30)
son.work(60)
>> Sonny은 BBQ을 먹습니다.
>> Sonny은 30분 동안 잡니다.
>> Sonny은 60분 동안 뒤지게 공부합니다.
>> Sonny은 BBQ을 먹습니다.
>> Sonny은 30분 동안 잡니다.
>> Sonny은 60분 동안 노예마냥 일합니다.
근데 문제는 person의 기능을 잃게한다.
뒤지게 공부하거나 노예마냥 일 밖에 못합니다.
즉, method override는 부모기능을 쓰지 못하게 합니다.
이것을 막아 주는 것이 super 입다.
super().
class person:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print('{}은 {}을 먹습니다.'.format(self.name, food))
def sleep(self, minute):
print('{}은 {}분 동안 잡니다.'.format(self.name, minute))
def work(self, minute):
print('{}은 {}분 동안 일할 준비를 합니다.'.format(self.name, minute))
class student(person): # person이기도 하기때문에 기본적인 것을 상속받을 수 있다.
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute): ##### method override ####
super().work(minute) ##### super #####
print('{}은 {}분 동안 뒤지게 공부합니다.'.format(self.name, minute))
class employee(person):
def __init__(self, name, age):
self.name = name
self.age = age
def work(self, minute): ##### method override ####
super().work(minute) ##### super #####
print('{}은 {}분 동안 노예마냥 일합니다.'.format(self.name, minute))
son = student('Sonny', 30) # 학생으로 인스턴스를 만들어도 상속받았기 때문에 작동한다.
son.eat('BBQ')
son.sleep(30)
son.work(60)
son = employee('Sonny', 30) # 학생으로 인스턴스를 만들어도 상속받았기 때문에 작동한다.
son.eat('BBQ')
son.sleep(30)
son.work(60)
>> Sonny은 BBQ을 먹습니다.
>> Sonny은 30분 동안 잡니다.
>> Sonny은 60분 동안 일할 준비를 합니다.
>> Sonny은 60분 동안 뒤지게 공부합니다.
>> Sonny은 BBQ을 먹습니다.
>> Sonny은 30분 동안 잡니다.
>> Sonny은 60분 동안 일할 준비를 합니다.
>> Sonny은 60분 동안 노예마냥 일합니다.
부모 클래스의 기능을 하고 싶으면 super().부모메쏘드 를 통해 할 수 있습니다.
'📌 Python' 카테고리의 다른 글
Python - 복소수 함수 만들기 (0) | 2021.01.21 |
---|---|
Python - 기본 타입으로 함수 만들기 (0) | 2021.01.21 |
Python - inheritance(상속) (0) | 2021.01.20 |
Python - method (0) | 2021.01.20 |
Python - __init__ (0) | 2021.01.20 |