1. 상속
- 기존의 정의해둔 클래스의 기능을 그대로 물려받음
- 기존 클래스에 기능 일부를 추가하거나, 변경하여 새로운 클래스를 정의함
- 코드를 재사용할 수 있게 됨
- 안정적이고 유지보수에 용이함
- 상속을 받고자 하는 대상인 기존 클래스를 부모, parent, super, base 클래스라고 부름
- 상속을 받는 새로운 클래스는 자식, child,sub클래스라고 부름
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 ('동물',10)
animal.eat('먹이')
animal.sleep(14)
-
동물는 먹이를 먹습니다
동물는 14시간 동안 잠을 잡니다.
class Dog (Animal): # Animal 클래스를 상속
pass
Rucy = Dog()#Animal 클래스의 생성자를 상속받았기 때문에
Rucy = Dog('루시',12)
Rucy.eat('사료')
- 루시는 사료를 먹습니다
Rucy.sleep(10)
-루시는 10시간 동안 잠을 잡니다.
2.메소드 오버라이딩
- 부모 클래스의 method를 재정의
- 자식 클래스의 인스턴스로 호출시 재정의된 메소드가 호출됨
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}시간 동안 잠을 잡니다. ')
class Dog(Animal):
def run(self):
print(f'{self.name}는 달립니다. ')
def eat(self,food):# 메소드 오버라이딩
print(f'{self.name}는 {food}를 아주 맛있게 먹습니다.')
def superEat(self,food):
super().eat(food)
Rucy = Dog('루시',12)
Rucy.eat('사료')
Rucy.run()
- 루시는 사료를 아주 맛있게 먹습니다.
루시는 달립니다.
Rucy.eat('사료')
- 루시는 사료를 아주 맛있게 먹습니다.
animal = Animal('동물',10)
animal.eat('먹이')
animal.run()# 자식 클래스의 객체 메소드를 사용할 수 없음
- 동물는 먹이를 먹습니다
Rucy.superEat('사료')
- 루시는 사료를 먹습니다
3. 다중 상속
- c#, java는 다중상속이 불가능
- 파이썬은 c++과 같이 다중상속이 가능
- 여러 클래스를 상속(개수에 제한이 없음)
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}시간 동안 잠을 잡니다. ')
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('밥')
- 김사과는 밥를 먹습니다
kim.study(2)
- 김사과는 2시간 동안 공부를 합니다
KimApple .mro()
- [__main__.KimApple, __main__.Animal, __main__.Human, object]
'KDT 수업 > Python' 카테고리의 다른 글
[파이썬] 19. 모듈 (0) | 2023.03.10 |
---|---|
[파이썬] 18.스페셜 메소드 (0) | 2023.03.10 |
[파이썬] 16. 객체지향과 클래스 (0) | 2023.03.10 |
[파이썬] 10. 딕셔너리 (0) | 2023.03.09 |
[파이썬] 09. 제어문(반복문) (0) | 2023.03.07 |