Data/Python

[Python] 파이썬 클래스 - 상속과 오버라이딩, super

재은초 2023. 6. 17. 22:10
반응형

클래스의 상속

  • 상속(Inheritance)이란 물려받다라는 뜻으로, 어떤 클래스를 만들 때 다른 클래스의 기능을 물려받을 수 있게 만드는 것이다.
  • 보통 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황일 때, 기존 클래스를 변경하지 않고 기능을 추가하거나 변경하려고 상속을 사용한다.
  • 상속 받고자 하는 대상인 기존 클래스는 'Parent, Super, Base class' 라고 부른고, 상속 받는 새로운 클래스는 'Child, Sub, Derived class' 라고 부른다.
# 클래스 상속 기본 구조
class 클래스명(상속할 클래스명)
# FourCal 상속한 MoreFourCal 클래스 수정하기 - a의 b제곱 기능 추가 
>>> class MoreFourCal(FourCal):         # FourCal 클래스 상속
...     def pow(self):                  # pow 메서드 추가
...         result = self.first ** self.second
...         return result
>>> a = MoreFourCal(4, 2)               # MoreFourCal 클래스 a객체에 값 세팅
>>> a.add()                             # FourCal의 모든 기능을 사용 가능 
6
>>> a.mul()
8
>>> a.sub()
2
>>> a.div()
2
>>> a.pow()                             # 추가한 pow 메서드 수행
16
  • 다중 상속이란 여러 개의 부모 클래스로부터 동시에 특성을 물려받는 것을 의미하한다.
  • JAVA 등 일반적인 프로그래밍 언어에서는 보통 다중상속을 허용하지 않지만 파이썬에서는 다중 상속을 허용하며, 자식 클래스를 생성할 때 부모 클래스들을 콤마(,)를 사용하여 나열하면 된다.
>>> class WolfDog(Wolf, Dog):
...     pass

 

메소드 오버라이딩

  • 오버라이딩(Overriding, 덮어쓰기)이란 부모 클래스로부터 상속받은 특성을 자식 클래스에서 재정의하는 것을 의미한다.
  • 부모 클래스의 메소드를 동일한 이름으로 다시 만들며, 자식 클래스의 객체로 메소드를 호출하면 재정의된 메소드가 호출된다.
>>> class Person:                      # Person 클래스 생성
...    def __init__(self):
...        print('Person __init__')
...        self.hello = '안녕하세요.'

>>> class Student(Person):             # Person 클래스 상속받은 Student 
...    def __init__(self):
...        print('Student __init__')
...        super().__init__()            # 기존 클래스 __init__ 메서드 재정의
...        self.school = '파이썬 코딩 도장'
 
>>> james = Student()
>>> print(james.school)
>>> print(james.hello)
Student __init__
Person __init__
파이썬 코딩 도장
안녕하세요.

 

super()

  • 자식 클래스에서 부모클래스의 메소드를 호출할 때 사용한다. 보통 오버라이딩하면 부모 클래스 기능 완전히 사라지나, super를 사용하면 부모 클래스에서 일부만 추가가 가능해진다.

 

Reference

반응형