KDT 수업/Python

[파이썬] 17.상속

니니는 진짜 전설이다 2023. 3. 10. 17:06

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__(selfnameage):
    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