형식
class AA:
def getTot():
...
def getPrn():
...
class BB(AA):
def getTot():
1)return AA.getTot() + 내용 # 선조 함수 호출 방법 1
2)super().getTot() + 내용 # 선조 함수 호출 방법 2
class DD(BB):
def getTot():
...
위의 형식은 다중 상속 형식을 나타내고 있는데, BB의 선조는 AA이고, DD의 선조는 BB이다.
이러한 경우, DD는 BB와 AA를 모두 부모(parent) 또는 super로 가진다고 한다.
예시01
# 번호는 실행 순서
# Person 클래스를 부모 클래스로, Student 클래스를 자식 클래스로 만들자.
# Person에서는 name, age를 사용하고 Student에서는 grade를 사용하여 이름, 나이, 성적을 출력해보자.
class Person:
def __init__(self, name, age): # 3)
self.name = name
self.age = age
def PersonInfo(self):
return self.name + " : (age : " + str(self.age) + ")"
class Student(Person):
def __init__(self, name, age, grade): # 1) 생성자 호출하면서 객체 생성
Person.__init__(self, name, age) # 2) 호출
self.grade = grade # 4)
def GetStudent(self):
return self.PersonInfo() + ", grade : " + str(self.grade)
if __name__ == '__main__':
y = Student("Ruri", 7, 3) # 상속관계 테스트
print(y.PersonInfo()) # Ruri, 7
print(y.GetStudent()) # Ruri, 7,3
출력결과
Ruri : (age : 7)
Ruri : (age : 7), grade : 3
Student 클래스는 후손 클래스로서, Person 클래스를 선조로 가진다.
따라서 Student는 Person의 메소드를 사용할 수 있다.
print(y.PersonInfo())
가 실행되는 것을 확인할 수 있다.
메소드 재정의
상속받은 후손 클래스에서 상속해 준 선조 클래스에 이미 정의된 메소드 기능을 변경해서 새로 정의하는 것
예시02
class MyScore:
def __init__(self,kor,eng):
self.kor = kor
self.eng = eng
def getTot(self):
return (self.kor + self.eng)
class MyScore_Sub(MyScore): #3과목의 총점을 구하자. - 선조 클래스에 2과목의 총점을 구하는 로직이 있다.
def __init__(self, kor, eng, mat):
self.mat = mat
super().__init__(kor, eng)
def getTot(self):
return (str(super().getTot() + self.mat))
class MyScore_Sub02(MyScore):
def __init__(self, kor, eng, mat, mus):
self.mus = mus
self.mat = mat
super().__init__(kor, eng)
def getTot(self):
return (str(super().getTot() + self.mat + self.mus))
if __name__ == '__main__':
m1 = MyScore_Sub(85,70,100)
print(m1.getTot())
m2 = MyScore_Sub02(100,90,60,85)
print(m2.getTot())
출력결과
255
335
MyScore 클래스는 MyScore_Sub 클래스와 MyScore_Sub02 클래스의 선조(부모) 클래스이다.
MyScore(선조) 에서 정의되어 있는getTot(self)
메소드가 MyScore_Sub(후손), MyScore_Sub02 에서도 정의되어 있는 것을 확인 할 수 있다.
super.getTot()
를 활용해 선조의 메소드 기능을 넘겨받는다.