About Python – “클래스(3) – 클래스의 상속, 메소드 오버라이딩”

About Python – “클래스(3) – 클래스의 상속, 메소드 오버라이딩”

1월 13, 2022

파이썬의 클래스 상속 (Inheritance)

상속은 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다. 상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해 프로그램의 요구에 맞추어 클래스를 수정할 수 있고 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.

위키백과

파이썬에서 상속은 아래와 같이 사용합니다.

class 상속받는클래스명(상속하는클래스명):
    기능 구현

아래의 코드를 살펴보겠습니다. 위의 부분은 예전에 만들어 놓았던 클래스입니다.

class ScoreManage:
    def __init__(self, data1, data2): # 생성자
        self.name1, self.score1 = data1
        self.name2, self.score2 = data2
    def average(self):
        average = (self.score1 + self.score2)/2
        return average
    def winner(self):
        if self.score1 > self.score2:
            return self.name1, self.score1
        else:
            return self.name2, self.score2

class NEWScoreManage(ScoreManage):
    pass

b = NEWScoreManage(("김종국", 100), ("유재석", 90))

class NEWScoreManage(ScoreManage):ScoreManage 클래스를 상속하는 NEWScoreManage 클래스를 만드는 코드입니다. 새로 만들어진 NEWScoreManage 클래스는 부모 클래스인 ScoreManage 의 기능을 모두 물려받습니다. 말 그대로, 상속입니다.

class NEWScoreManage(ScoreManage):
    def studentList(self):
        print("학생 리스트 : {}, {}".format( self.name1, self.name2))

b = NEWScoreManage(("김종국", 100), ("유재석", 90))
b.studentList()
# 학생 리스트 : 김종국, 유재석

상속해서 만든 클래스인 자식 클래스에 새로운 기능을 추가해보겠습니다. studentList라는 메소드는 학생들의 이름만 출력해 줍니다. 실제로 잘 동작하는 것을 볼 수 있습니다.

요약하자면, 자식 클래스(부모 클래스를 상속받아 만들어진 클래스) 는 부모 클래스(자식에게 상속해주는 클래스) 의 기능을 모두 상속받아 사용할 수 있습니다. 또한 자식 클래스에 기능을 부여함으로서 부모 클래스의 코드 수정 없이 기능을 확장할 수 있습니다.

파이썬의 메서드 오버라이딩 (Overriding)

위에서, 상속은 원래 클래스의 기능을 확장하는 목표로 주로 사용한다는 것을 알게 되었습니다. 그런데, 원래 어떤 학생의 점수가 높은지를 반환하는 winner 메소드의 기능을 상속받은 클래스에서 다시 정의하고 싶어졌습니다. 그게 가능할까요?

class NEWScoreManage(ScoreManage):
    def studentList(self):
        print("학생 리스트 : {}, {}".format( self.name1, self.name2))
    def winner(self): # 오버라이딩
        if self.score1 > self.score2:
            self.gap = self.score1 - self.score2
            return self.name1, self.score1 , self.gap
        else:
            self.score2 - self.score1
            self.gap = self.score2 - self.score1
            return self.name2, self.score2, self.gap

c = NEWScoreManage(("정준하", 100), ("박명수", 80))
print(c.winner())

자식 클래스가 부모 클래스에 있는 메소드를 다시 정의하는 것을 오버라이딩이라고 합니다. 그리고 위의 결과와 같이, 부모 클래스의 메서드가 아닌 오버라이딩한 메서드가 호출됩니다.

About Python – “클래스(4) – 객체 변수 vs 클래스 변수” 에서 이어집니다.

Leave A Comment

Avada Programmer

Hello! We are a group of skilled developers and programmers.

Hello! We are a group of skilled developers and programmers.

We have experience in working with different platforms, systems, and devices to create products that are compatible and accessible.