728x90
반응형
SMALL
1. 상속
- 기존의 정의해둔 클래스의 기능을 그대로 물려받음
- 기존 클래스에 기능 일부를 추가하거나, 변경하여 새로운 클래스를 정의함
- 코드를 재사용할 수 있게 됨
- 안정적이고 유지보수에 용이함
- 상속을 받고자 하는 대상인 기존 클래스를 부모 클래스(parent class, super class, base class) 라고 부름
- 상속을 받는 새로운 클래스는 자식 클래스(child class, sub class)라고 부름
- 부모 클래스 만들기
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(f'{self.name}는 {food}를 먹습니다')
def sleep(self, hour):
print(f'{self.name}는 {hour}시간 동안 잠을 잡니다')
animal = Animal('동물', 14) # 객체 생성
animal.eat('먹이')
animal.sleep(14)
>>> 동물는 먹이를 먹습니다
동물는 14시간 동안 잠을 잡니다
- 부모 클래스를 상속받아 자식 클래스
class Cat(Animal):
pass
BackDu = Cat('백두',4) # BackDu라는 객체를 생성
BackDu.eat('먹이') # Animal class(부모클래스)의 메소드를 그대로 사용 가능
BackDu.sleep(12)
>>> 백두는 먹이를 먹습니다
백두는 12시간 동안 잠을 잡니다
2. 메소드 오버라이딩(method overriding)
- 부모 클래스의 method를 재정의
- 자식 클래스의 인스턴스로 호출시 재정의된 메소드가 호출됨
- super(): 부모클래스를 불러줌, 오버라이딩 한 자식클래스의 메소드가 아닌 부모 클래스의 원래 메소드를 사용하고자 할때
- 부모 클래스
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(f'{self.name}는 {food}를 먹습니다')
def sleep(self, hour):
print(f'{self.name}는 {hour}시간 동안 잠을 잡니다')
BackDu = Cat('백두',4)
BackDu.eat('사료')
BackDu.run()
>>> 백두는 사료를 먹습니다
백두는 달립니다.
- 자식 클래스
class Cat(Animal):
def run(self):
print(f'{self.name}는 달립니다.')
# 메소드 오버라이딩: 부모클래스의 eat메소드를 재구현
def eat(self,food):
print(f'{self.name}는 {food}를 아주 많이 먹습니다')
def super_eat(self, food):
super().eat(food)
BackDu = Cat('백두',4)
BackDu.eat('사료')
BackDu.run()
>>> 백두는 사료를 아주 많이 먹습니다
백두는 달립니다.
- 부모 클래스를 통해 다른 객체를 생성
# 부모클래스(Animal)를 통해 객체를 생성했기 때문에 자식 클래스(Cat)의 객체 메소드를 사용할 수 없음
animal = Animal('동물', 13)
animal.eat('먹이')
>>> 동물는 먹이를 먹습니다
BackDu.super_eat('사료')
>>> 백두는 사료를 먹습니다 # 부모 클래스의 메소드 사용
3. 다중상속
- C#, Java는 다중상속이 불가능
- 파이썬은 C++과 같이 다중상속이 가능
- 여러 클래스를 상속(개수의 제한이 없음)
- 다중 상속을 하는 부모 클래스의 메소드가 다른 것이 좋음
- mro(): 클래스가 어떤 클래스를 상속받았는지 알 수 있는 함수
- 부모 클래스 1
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(f'{self.name}는 {food}를 먹습니다')
def sleep(self, hour):
print(f'{self.name}는 {hour}시간 동안 잠을 잡니다')
- 부모 클래스 2
class Human:
def __init__(self, name, age):
self.name = name
self.age =age
def study(self, hour):
print(f'{self.name}는 {hour}시간 동안 공부를 합니다')
- 두 개의 부모 클래스를 다중 상속 받는 자식 클래스
class KimApple(Animal, Human):
pass
kim = KimApple('김사과', 20) # 객체 생성, 부모클래스의 생성자에 따른 매개변수 입력
kim.eat('빵') # Animal 클래스 메소드 상속
>>> 김사과는 빵을 먹습니다
kim.study(2) # Human 클래스 메소드 상속
>>> 김사과는 2시간 동안 공부를 합니다
KimApple.mro() # 상속 받은 부모 클래스 알아보기
>>> [__main__.KimApple, __main__.Animal, __main__.Human, object]
728x90
반응형
LIST
'Python > Basic' 카테고리의 다른 글
[파이썬, Python] 모듈(Module)에 대해 알아보자 🧐 (1) | 2023.03.10 |
---|---|
[파이썬, Python] 스페셜 메소드(Special Method) (0) | 2023.03.10 |
[파이썬, Python] 객체지향 프로그래밍 - 객체 지향과 클래스(Class) (0) | 2023.03.09 |
[파이썬, Python] 변수의 범위 - 스코프(Scope), 지역변수(local 변수), 전역변수(global 변수), global 키워드 (0) | 2023.03.09 |
[파이썬, Python] 함수 - 2️⃣ 콜백 함수(Callback Function) (0) | 2023.03.09 |