38.1 사람 클래스로 학생 클래스 만들기

클래스 상속은 다음과 같이 클래스를 만들 때 ( )(괄호)를 붙이고 안에 기반 클래스 이름을 넣습니다.

class 기반클래스이름:
    코드
 
class 파생클래스이름(기반클래스이름):
    코드

그럼 간단하게 사람 클래스를 만들고 사람 클래스를 상속받아 학생 클래스를 만들어보겠습니다.

class_inheritance.py

class Person:
    def greeting(self):
        print('안녕하세요.')
 
class Student(Person):
    def study(self):
        print('공부하기')
 
james = Student()
james.greeting()    # 안녕하세요.: 기반 클래스 Person의 메서드 호출
james.study()       # 공부하기: 파생 클래스 Student에 추가한 study 메서드

실행 결과

안녕하세요.
공부하기

Student 클래스를 만들 때 class Student(Person):과 같이 ( )(괄호) 안에 기반 클래스인 Person 클래스를 넣었습니다. 이렇게 하면 Person 클래스의 기능을 물려받은 Student 클래스가 됩니다.

Student 클래스에는 greeting 메서드가 없지만 Person 클래스를 상속받았으므로 Student 클래스의 greeting 메서드를 사용할 수 있습니다.

james = Student()
james.greeting()    # 안녕하세요.: 기반 클래스 Person의 메서드 호출

그리고 Person 클래스에는 없는 새로운 메서드인 study를 추가했습니다.

james.study()       # 공부하기: 파생 클래스 Student에 추가한 study 메서드

Person 클래스와 Student 클래스의 관계를 그림으로 나타내면 다음과 같은 모양이 됩니다.

그림 38-3 클래스 상속과 메서드 추가
그림 38 3 클래스 상속과 메서드 추가

이처럼 클래스 상속은 기반 클래스의 기능을 유지하면서 새로운 기능을 추가할 수 있습니다. 특히 클래스 상속은 연관되면서 동등한 기능일 때 사용합니다. 즉, 학생은 사람이므로 연관된 개념이고, 학생은 사람에서 역할만 확장되었을 뿐 동등한 개념입니다.

참고 | 파생 클래스인지 확인하기

현재 클래스가 특정 클래스의 파생 클래스인지 확인할 때는 issubclass 함수를 사용합니다. 파생 클래스가 맞으면 True, 아니면 False를 반환합니다.

  • issubclass(파생클래스, 기반클래스)

    • >>> class Person:
      ...     pass
      ...
      >>> class Student(Person):
      ...     pass
      ...
      >>> issubclass(Student, Person)
      True