기존 클래스를 상속받고 특정한 method를 수정하고 싶을 때 또는 새로운 method를 추가하고 싶을 때에도 overiding을 사용한다.
오버라이딩이란 "부모 클래스의 메소드를, 자식 클래스에서 재정의 하여 사용하는 것"을 의미한다.
class perosn:
def __init__(self, name: str) -> None:
self.name = name
def show(self):
print(self.name)
위와 같은 person이라는 객체가 있는데 나는 이를 상속받아 학생이라는 클래스를 만들려고 한다. 학생이라는 클래스에는 name뿐만아니라 grade변수도 갖고 싶다. 그래서 우리는 __init__ 메서드를 오버라이딩하고 show함수 또한 grade 변수를 추가해 오버라이딩해준다.
(__init__을 수정할게 아니라면 안써줘도 된다. 왜냐면 상속을 받으면 기본적으로 모든 method를 다 가져오기 때문이다)
class Student(Person):
def __init__(self, name: str, grade: int) -> None:
super().__init__(name)
self.grade = grade
def show(self):
print(self.name)
print(self.grade)
기존의 name 변수를 유지하고 싶으면 super()를 통해 부모 클래스의 method를 호출한다.
만약에 부모 클래스의 변수가 위처럼 name하나가 아니고 엄청 많다면 이일히 다 써줘야 하는 것일까? 절대 아님
아래처럼 **kwargs를 사용해 받으면 된다.
class Student(Person):
def __init__(self, grade: int, **kwargs) -> None:
super().__init__(**kwargs)
self.grade = grade
'Python' 카테고리의 다른 글
[Python] keyword (0) | 2022.07.15 |
---|---|
[Python] __future__ (import __future__) (0) | 2022.07.13 |
[python] Class이해하기 (0) | 2021.11.19 |
[python] list앞에 붙은 * (unpacking) (0) | 2021.10.27 |
[python] python 파일내에 terminal 명령어 포함하는 방법 (0) | 2021.10.19 |