반응형
클래스 상속
클래스가 다른 클래스로부터 데이터 속성과 메소드를 물려받는 것을 말함.
- 유산을 물려주는 클래스를 기반 클래스 혹은 부모 클래스라고 불림
- 유산을 물려받는 클래스를 파생 클래스 혹은 자식 클래스라고 불림
클래스를 상속하는 방법은 자식 클래스의 이름 뒤에 괄호()를 붙이고 그 안에 부모 클래스의 이름을 적으면 된다.
class parent:
test
class Child(parent):
test
오버라이딩과 오버로딩은 어떻게 다른걸까?
오버라이딩과 오버로딩을 이해하려면 객체 지향 프로그래밍에서의 다형성이라는 개념을 알아야한다.
다형성이란 같은 모양의 코드가 다른 동작을 하는 것을 의미하며, 종류로는 오버라이딩과 오버로딩이 있다.
오버라이딩 | 상위 클래스의 메소드를 하위 클래스가 재정의해서 사용함 |
오버로딩 | 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수를 다르게 가짐 |
파이썬에서는 오버로딩을 지원하지 않는다. 하지만 지역변수에 디폴트 값을 부여함으로써 오버로딩의 기능을 대체할 수 있다.
1. 오버라이딩
class Car:
def __init__(self, name):
self.name = name
def show_info(self):
print("이름:" + self.name)
class Acar(Car):
pass
# 오버라이딩
class Bcar(Car):
def show_info(self):
print(self.name)
Acar = Car('트럭')
print(Acar.show_info()) # 이름: 트럭
Bcar = Car('람보르기니')
print(Bcar.show_info()) # 이름: 람보르기니
Acar.show_info() 를 호출하면 '이름:트럭'이 출력되지만, Bcar.show_info() 를 호출하면 '이름:람보르기니'가 출력된다.
이는 파이썬의 기본 원칙인 '아래에 위치한 메소드가 위에 위치한 메소드보다 우세하다'의 특징 때문에 오버라이딩이 적용된 모습을 볼 수 있고, 동일한 이름의 부모 클래스 내 함수를 자식 클래스 내에서 쓸 수 있음을 보여준다.
2. 오버로딩
class overloading:
def __init__(self, *args):
self.args = list(args)
def __call__(self):
print("overloading list:", self.args)
def __add__(self, other):
self.args += other.args
word1 = overloading("Hello World", "Good Bye")
word2 = overloading("Python")
print(word1()) # ['Hello World', 'Good Bye']
print(word2()) # ['Python']
위의 예시는 연산자의 오버로딩이다.
__add__ 메소드를 이용해서 word1 + word2 를 간단하게 합칠 수 있다.
class overloading:
def __init__(self, *args):
self.args = list(args)
def __call__(self):
print("overloading list:", self.args)
def __add__(self, other):
self.args += other.args
word1 = overloading("Hello World", "Good Bye")
word2 = overloading("Python")
word1 + word2 # __add__ 메소드 실행(오버로딩의 예시)
print(word1()) # ['Hello World', 'Good Bye', Python']
print(word2()) # ['Python']
위 코드의 출력값을 보면 word1의 결과는 바뀌었지만, word2는 변경되지 않은 것을 확인할 수 있다.
반응형
'개발 & 데이터베이스 > 파이썬' 카테고리의 다른 글
디스코드 봇 실행 오류 (1) | 2024.02.27 |
---|---|
[파이썬] 기초 문법 #4 함수와 클래스 (0) | 2022.01.09 |
[파이썬] 기초 문법 #3 반복문과 break, continue 명령 (0) | 2022.01.07 |
[파이썬] 기초 문법 #2 조건문 (0) | 2022.01.06 |
[파이썬] 기초 문법 #1 문자열 인덱싱, 리스트, 투플, 딕셔너리 (0) | 2021.12.24 |