반응형
먼저 오버라이드(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)를 알아봤습니다.
반응형
'파이썬(Python) > 파이썬 지식' 카테고리의 다른 글
파이썬에서 예외 처리 하기 try ~ except (0) | 2023.11.18 |
---|---|
파이썬 클래스에 대한 모든 것 __init__, __call__, 상속 (1) | 2023.11.14 |
파이썬의 모듈에 대한 모든 것 feat. __name__?, __init__? (1) | 2023.11.02 |
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
댓글