Python

class 상속과 method 오버라이딩

기존 클래스를 상속받고 특정한 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