본문 바로가기
파이썬(Python)/파이썬 지식

파이썬에서 메서드(함수) 오버라이드(override)

by 기계공학 주인장 2023. 11. 15.
반응형

먼저 오버라이드(override)란 간단히 말하면 같은 이름을 가진 메소드(함수)를 다른 기능으로 재정의 해서 사용할 수 있는 것입니다.

 

파이썬에서는 다음과 같이 구현할 수 있습니다.

 

class Parent: 
    def method(self): 
        print("This is from the Parent class")

# 부모 클래스를 상속한 클래스
class Child(Parent): 
	# 부모 클래스와 같은 이름을 갖지만 다른 기능으로 정의
    def method(self): 
        print("This is from the Child class")

c = Child()
c.method()

 

위 결과를 출력하면 다음과 같은 결과를 출력합니다.

 

"This is from the Child class"

 


오버라이드 활용하기

오버라이드는 다음과 같은 방법으로 활용할 수 있습니다.

 

class Unit:
    def __init__(self, name, hp, speed):
        self.name = name
        self.hp = hp
        self.speed = speed

    def move(self, location):
        print("지상 유닛")
        print("{}: {} 방향으로 {} 속도로 이동중"
              .format(self.name, location, self.speed))


# Unit 클래스를 상속한 클래스 생성
class FlyUnit(Unit):
    def __init__(self, name, hp, speed):
        # 부모 클래스(Unit)에서 name, hp만 그대로 가져와서 쓰게 한다.
        super().__init__(name, hp, speed)

    def move(self, location):
        print("공중 유닛")
        print("{}: {} 방향으로 {} 속도로 날아가는중"
              .format(self.name, location, self.speed))


if __name__ == "__main__":
    marine = Unit("해병", 45, 5)
    marine.move("8시")

 

 

위 코드와 같이 다른 클래스에서 비슷한 기능이나 일부분 같은 기능을 가진 함수를

 

자식 클래스에서 재정의 or 활용해서 사용해야하는 경우 주로 사용됩니다.

 

그렇기 때문에 위 코드에서 FlyUnit class에서 move 메서드를 재정의 하지 않으면 에러가 발생합니다.


함수를 재정의하는 방식으로 활용하기

 

하지만, pass를 활용하면 함수를 정의하지 않아도 에러가 발생하지 않습니다.

 

class Animal:
    def sound(self):
    	## pass를 하면 그냥 뛰어넘을 수 있다
        pass

class Dog(Animal):
    def sound(self):
        print("Woof!")

class Cat(Animal):
    def sound(self):
        print("Meow!")

dog = Dog()
cat = Cat()

dog.sound()  # 출력: Woof!
cat.sound()  # 출력: Meow!

 

 

만약 Animal class의 sound 메서드는 pass 처리가 되어있기 때문에

 

Cat class에서 다음과 같이 sound 메서드를 정의하지 않아도 에러가 발생하지 않습니다.

 

class Animal:
    def sound(self):
    	## pass를 하면 그냥 뛰어넘을 수 있다
        pass

class Dog(Animal):
    def sound(self):
        print("Woof!")

class Cat(Animal):
    def sound(self):
    	# 함수를 재정의 하지 않아도 에러가 발생하지 않음

dog = Dog()
cat = Cat()

dog.sound()  # 출력: Woof!
cat.sound()  # 출력: Meow!

 


기존의 함수를 재활용하는 방식으로 응용

 super()를 사용하면 부모 클래스에 있는 변수, 함수를 사용할 수 있습니다.

class Animal:
    def greet(self):
        print("Hello, I am an animal.")

class Dog(Animal):
    def greet(self):
    	# super를 사용해서 부모 클래스 사용
        super().greet()
        print("And I am a dog.")

dog = Dog()
dog.greet()

# 출력:
# Hello, I am an animal.
# And I am a dog.

결론

위와 같은 방법으로 파이썬에서 오버라이드(override)를 알아봤습니다.

반응형


"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


댓글