Day 6 상속
2023. 3. 10. 15:45ㆍ파이썬
In [ ]:
%%shell
jupyter nbconvert --to html /content/
1. 상속¶
기존의 정의해둔 클래스의 기능을 그대로 물려받음
기존 클래스에 기능 일부를 추가하거나, 변경하여 새로운 클래스를 정의함
코드를 재사용할 수 있게 된다.
안정적이고, 유지보수에 용이함
상속을 받고자하는 대상인 기존 클래스: parent,super,base 클래스 라고 부름 (명칭이 다양)
상속을 받고자하는 클래스 : 자식, child,sub 클래스
In [ ]:
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,time):
print(f'{self.name}은 {time}시간 동안 잠을 잡니다.')
In [ ]:
animal = Animal('동물',10)
animal.eat('먹이')
animal.sleep(14)
동물은 먹이를 먹습니다. 동물은 14시간 동안 잠을 잡니다.
2. 메소드 오버라이딩¶
부모 클래스의 method를 재정의
자식 클래스의 인스턴스로 호출 시 재정의된 메소드가 호출
In [ ]:
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) # super() 부모 클래스를 호출
In [ ]:
rucy = Dog('루시',5)
rucy.eat('사료')
rucy.sleep(10)
rucy.run()
#자식은 부모의
rucy.superEat('밥')
루시는 사료를 아주 맛있게 먹습니다. 루시은 10시간 동안 잠을 잡니다. 루시는 달립니다. 루시은 밥를 먹습니다.
In [ ]:
animal = Animal('동물',15)
animal.eat('먹이') #자식 클래스의 객체 메소드를 사용 할 수 없다
동물은 먹이를 먹습니다.
3. 다중 상속¶
C#, Java는 다중 상속이 불가능
파이썬은 C++과 같이 다중상속이 가능
여러 클래스를 상속 받아(갯수 제한 X)
상속을 많이 받는다는 것은 단순히 좋은 기능은 아니다.
조건이 많이 생기고, 더 복잡하고 애매해질 수 있어서이다.
In [ ]:
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,time):
print(f'{self.name}은 {time}시간 동안 잠을 잡니다.')
In [ ]:
class Human:
def __init__(self,name,age):
self.name = name
self.age = age
def study(self,hour):
print(f'{self.name}은/는 {hour}시간 동안 공부를 합니다.')
In [ ]:
class KimApple(Animal,Human): #다중 상속 / 클래스 연관성이 없어야 좋고, 프로퍼티 갯수가 동일해야된다.
pass
In [ ]:
kim = KimApple('김사과',20)
kim.eat('밥')
kim.study(2)
KimApple.mro() # class이름.mro()
김사과은 밥를 먹습니다. 김사과은/는 2시간 동안 공부를 합니다.
Out[ ]:
[__main__.KimApple, __main__.Animal, __main__.Human, object]
In [ ]:
728x90
'파이썬' 카테고리의 다른 글
Day 8 파일 입출력 (0) | 2023.03.14 |
---|---|
Day 7 예외 처리 (0) | 2023.03.13 |
Day 6 구글 드라이브 활용 (0) | 2023.03.10 |
Day 6 모듈 (0) | 2023.03.10 |
Day 5 객체지향과 클래스 (0) | 2023.03.09 |