기존 클래스에 특정 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 출력하게 수정(오버라이딩)
'Programming' 카테고리의 다른 글
[Dev] 리눅스 inode full 해결하기(WIP) (0) | 2021.04.14 |
---|---|
[Dev] Git 협업 프로토콜(branch - commit - PR - Merge) (0) | 2021.03.22 |
[CS] 파이썬 multi-processing(parmap) (0) | 2021.03.22 |
[WIL] CS & Dev convention (0) | 2021.03.04 |
객체지향 프로그래밍(2) 상속과 다형성 (0) | 2021.01.03 |