Published 2021. 1. 20. 20:50

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
복사했습니다!