카테고리 없음

[파이썬] Python 클래스 상속 (inheritance) - 객체지향 프로그래밍

행니짱 2022. 8. 8. 16:42

오늘 포스팅에서는 객체 지향 프로그래밍의 4가지 기둥 중 하나인, "상속"에 대해서 알아보겠습니다. 

 

상속이란, 우리가 코드를 짤때 겹치는 부분을 간소화 해주기 위해 부모 클래스를 만들고, 

부모클래스의 코드를 자식 클래스에 상속해서 사용 할 수 있게 해주는 것을 말합니다. 

 

예를들어, 회사의 직원들에게 월급을 나눠주는 프로그램이 있다고 가정합시다. 

회사 명, 임금 상승률, 성명, 임금상승 함수 등은 모든 클래스에 들어가는 내용이므로 부모 클래스에 적어줍니다. 

이 후 부모 클래스에서 자식 클래스로 상속을 받으면, 

부모 클래스에 있는 코드가 자동으로 자식 클래스로 넘어갑니다. 

=> class 자식 클래스(부모 클래스):

이때, 자식 클래스에서는 부모 클래스로부터 물려 받은 내용을 본인에 맞게 수정할 수 있습니다. 

이 과정을 '오버라이딩'한다고 합니다. 

상속을 통해서, 자식 클래스에서는 따로 raise_pay 함수와 임금 상승률인 raise_percentage를 정의하지 않았음에도 사용할수 있음을 알 수 있다. 

또한 메소드 오버라이딩을 통해서, 자식 클래스만의 메소드인 service함수와 back함수를 메소드로 만들 수 있다. 

 

생성자의 경우에는, 부모 클래스 생성자는 __init__(self, name, wage)이지만, 자식 클래스에서 필요로하는 생성자는 __init__(self, name, wage, on_standby)이므로, 이 경우에는 super()함수를 통해서 부모 클래스 메소드를 사용할 수 있다. 

 

mro()함수를 사용하면, 클래스가 상속받은 부모 클래스들이 순서대로 담긴 리스트를 리턴해준다. 

위 경우는 ServiceOperator의 부모 클래스로 Employee 클래스, Employee위의 부모 클래스로 object(최상위)가 있음을 알 수 있다. 

help()함수를 사용하면, 부모클래스에서 어떤 메소드가 상속되었는지 알 수 있다. 

위 경우에는 조금 잘렸지만, Methods inherited from Employee: company_name 이라고 쓰여진걸 볼 수 있다. 

 

파이썬에서는 다중상속도 지원한다. (Java의 경우 지원X)

다중 상속의 경우에는 메소드가 어느 부모 클래스에서 왔는지 혼동될 가능성이 있어 추천하지 않는 방식이라고 한다.