상속은 부모클래스의 속성과 기능을 그대로 이어받아 사용할 수 있게 하는 것을 의미 합니다.
기능의 일부분을 변경해야 할 경우 상속받은 자식 클래스에서 해당 기능만 다시 수정(정의)하여 사용할 수 있게 하는 것 입니다.
다형성
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것입니다.
즉 오버라이딩(Overriding), 오버로딩(Overloading)이 가능합니다.
📚 오버라이딩 : 부모클래스의 메서드와 같은 이름, 매개변수를 재정의 하는것 입니다.
class Animal:
def make_sound(self):
print("The animal makes a sound.")
class Dog(Animal):
def make_sound(self):
print("The dog barks.")
# create an instance of the Dog class
my_dog = Dog()
# call the make_sound method of the Dog class
my_dog.make_sound()
📚 오버로딩 : 같은 이름의 함수를 여러개 정의하고, 매개변수의 타입과 개수를 다르게 하여 매개변수에 따라 다르게 호출할 수 있게 하는 것 입니다.
class Calculator:
def add(self, a, b, c=0):
return a + b + c
# create an instance of the Calculator class
my_calculator = Calculator()
# call the add method with two arguments
result1 = my_calculator.add(2, 3)
print(result1) # outputs 5
# call the add method with three arguments
result2 = my_calculator.add(2, 3, 4)
print(result2) # outputs 9
그리고 파이썬에서는 오버로딩을 정식으로 지원하지 않고 구현은 가능하다는 점을 알고 있으면 되겠습니다.
오버라이딩 오버로딩 간단 요약
간단하게 요약하자면 오버라이딩은 밑의 예제 처럼 원래 있던 내용을 상속받아 쓰면서 다른 기능으로 사용할 수 있게 해주는 것이고 오버로딩은 이름은 같은 함수가 매개변수의 갯수에 따라서 다른 동작을 하는 것이라고 생각하면 되겠습니다.
클래스 예시
class Animal:
def __init__(self, name):
self.name = name
def move(self):
print("move")
def speak(self):
pass
class Dog (Animal):
def speak(self):
print("bark")
class Duck (Animal):
def speak(self):
print("quack")