티스토리 뷰

상속(Inheritance)이란?

  • 하나의 객체를 설계할 수 잇는 구체 또는 단일 클래스를 또 다른 클래스가 기능 추가 및 변경, 특성을 추가하여 새로운 클래스로 정의하는 것

  • 기존에 정의된 클래스를 수퍼 클래스, 부모클래스, 선조클래스 라고 하며 상속을 받아 기능을 확장 하는 클래스를 하위 클래스, 자손, 후손 클래스, 파생 클래스 라고 부른다.

  • 클래스 간의 상속은 멤버변수와 메소드를 또 다른 클래스에게 그대로 전해 준다.

  • 선조클래스명.멤버 로 호출

  • 생성자는 상속받을 수 없다

상속의 선언 방법

  • class 후손 클래스명(선조 클래스명, 선조 클래스명, ...)

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    
    def PersonInfo(self):
        return f'{self.name} : (age : {self.age})'

class Student(Person):
    def __init__(self, name, age, grade):
        Person.__init__(self, name, age)
        self.grade = grade
    
    def GetStudent(self):
        return f'{self.PersonInfo()}, grade : {self.grade}'

if __name__ == '__main__':
    x = Person('Dominica', 12)
    y = Student('Ruri', 7, 3)

    print(x.PersonInfo())
    print(y.PersonInfo())
    print(y.GetStudent())

super()

  • super() 키워드는 선조 클래스를 의미

class Student(Person):
    def __init__(self, name, age, grade):
        super().__init__(name, age)
        self.grade = grade
    
    def GetStudent(self):
        return f'{self.PersonInfo()}, grade : {self.grade}'

오버라이딩(Overriding)

  • 메소드 재정의라고도 하며 상속받은 후손 클래스에서 상속해준 선조 클래스에 이미 정의되어있는 메소드의 기능을 변경해서 새로 정의하는 것

  • 오버라이딩 하고자 하는 메소드가 선조 클래스에 존재해야 한다.

  • 메소드 명이 반드시 같아야 한다.

  • 선조가 정의한 메소드의 파라미터 개수가 같아야한다.

  • 리턴 형이 같지 않아도 된다.

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):
    def __init__(self, kor, eng, mat):
        super().__init__(kor, eng)
        self.mat = mat
    def getTot(self):
        return super().getTot() + self.mat

if __name__ == '__main__':
    print(MyScore(56,76).getTot())
    print(MyScore_Sub(100,100,100).getTot())

다중 상속

  • 두 개 이상의 부모가 같은 메소드를 가지고 있을 때는 먼저 정의된 쪽이 호출된다.

  • class 후손 클래스 명 (BaseClass1, BaseClass2, BaseClass3, ...) :

            << 명령 >>

class Dog:
    def sound(self):
        print('bark')

class Cat:
    def sound(self):
        print('meow')

class Chimera(Dog, Cat):
    pass

if __name__ == '__main__':
    Chimera().sound()

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함