본문 바로가기

Programming

[파이썬] 클래스 상속과 method override

기존 클래스에 특정 method를 추가하거나 수정하고 싶을 때, 클래스를 상속받아 해당 method를 overrinding 한다.

파이써닉한 코드 스타일의 기본이고, 파이토치 소스코드에서 많이 등장하니까 확실하게 알아두자!


class Student:
    def __init__(self, name: str) -> None:
        self.name = name

    def show(self):
        print(self.name)

name을 변수로 갖는 Student class가 있을 때, 학과 변수를 추가하고 싶으면 __init__ method를 overriding 하면 된다.

class StudentDept(Student):
    def __init__(self, dept: str, name: str) -> None:
        super().__init__(name)
        self.dept = dept

 1. 새로운 클래스 StudentDept를 Student 클래스를 상속받아 만든다

2. 오버라이딩 할 method를 써준다. 

3. dept 변수를 추가할 건데, 기존의 name 변수도 유지하고 싶다면, super()를 통해 부모 클래스의 method를 호출한다. 

4. 지금은 부모 클래스의 변수가 name 하나라 괜찮지만, 많다면 다 쓰지 않고 다음과 같이 **kwargs 로 받을 수 있다. 

class StudentDept(Student):
    def __init__(self, dept: str, **kwargs) -> None:
        super().__init__(**kwargs)
        self.dept = dept

 

dept 변수를 추가했으니 show method를 오버라이딩해 name과 dept를 같이 출력하게 수정해보자,

class StudentDeptShow(StudentDept):
    def show(self):
    	print(self.name, self.dept) 

1. 위에서 새로 만든 StudentDept 클래스를 상속받는 StudentDeptShow 클래스 선언

2. __init__ 은 수정할거 아니니까 안 써줘도 되고(상속받는 클래스의 모든 method를 그대로 가져오기 때문)

3. show method를 name과 dept 출력하게 수정(오버라이딩)