Web Development/Python

(Python) 오버라이드

seongduck 2022. 10. 13. 22:43
  • python 오버라이드
  • python override
  • super()

1. Override

class Animal():
    def walk(self):
        print("걷는다.")
    
    def eat(self):
        print("먹는다.")
        
    def greet(self):
        print("인사한다.")

class Human(Animal):
    '''사람'''     
    def wave(self):
        print("손을 흔든다.")
        
    def greet(self):
       self.wave()
        
class Dog(Animal):
    '''강아지'''     
    def wag(self):
        print("꼬리를 흔든다.")
        
    def greet(self):
        self.wag()
        
person = Human() #인스턴스 생성
person.greet()

dog = Dog() #강아지 인스턴스 생성
dog.greet()
  • 부모클래스로부터 같은 메소드를 상속받았지만 다르게 표현해야할 경우가 있다.
  • 이처럼 부모클래스의 메소드를 자식메소드에 똑같이 사용하는 것을 "Override"라고 한다.
  • 즉, 부모 메소드를 덮어씌운다 라고 이해하면 된다.

2. 예제

  • Car 클래스를 Truck이 상속받아 Run 메소드를 Override로 진행해보자
class Car():
    
    def run(self):
        print("차가 달립니다.")


class Truck(Car):
    
    def load(self):
        print("짐을 실었습니다.")
    def run(self):
        print("트럭이 달립니다.")
     
truck = Truck()
truck.run()

3. super()

  • 부모 메소드도 사용
class Animal():
    def __init__(self,name):
        self.name = name
    def walk(self):
        print("걷는다.")
    
    def eat(self):
        print("먹는다.")
        
    def greet(self):
        print("{}이/가 인사한다.".format(self.name))

class Human(Animal):
    '''사람'''     
    def __init__(self, name, hand):
        super().__init__(name)
        self.hand = hand
    
    def wave(self):
        print("{}을 흔들면서".format(self.hand))
        
    def greet(self):
       self.wave()
       super().greet()
       
person = Human("사람","오른손")
person.greet()
  • Animal을 상속받은 Human Class에서 바로 실행하는 메소드 "__init__"에 "super()"를 사용했다.
  • super()를 통해 부모의 "__init__에 접근하여 메소드를 호출한다.
  • 자식 메소드의 "__init__"에 의하여 바로 메소드가 호출된다.
  • 자식의 greet()를 호출했으므로 실행 방향은
    • self.wave() -> {}을 흔들면서
    • super().greet() 호출
    • {} 이/가 인사한다.
#출력 결과
오른손을 흔들면서
사람이/가 인사한다.

4. 실습

  • 자식 Truck 클래스에서 name, capacity를 입력받고 super()를 사용해서 호출해보자
class Car():
    
    def __init__(self, name):
        self.name = name
    
    def run(self):
        print("차가 달립니다.")


class Truck(Car):
    
    def __init__(self, name, capacity):
        super().__init__(name)
        self.capacity = capacity
        
    def load(self):
        print("짐을 실었습니다.")

'Web Development > Python' 카테고리의 다른 글

(Python) Datetime 날짜 타입  (0) 2022.10.13
(Python) Comprehension  (0) 2022.10.13
(Python) 상속  (0) 2022.10.13
(Python)Class 만들기와 함수, 특수한 메소드  (0) 2022.10.13