본문 바로가기
개발 언어 (Language)/Python

파이썬 상속

by Tarake 2024. 8. 25.

상속


클래스의 상속은 기존 클래스에 있는 필드와 메소드를 그대로 물려받는 새로운 클래스를 만드는 것입니다. 상속 받은 클래스는 추가로 필드와 메소드를 만들어 사용해도 됩니다.

 

부모 클래스

class Person:
    def __init__(self, fname, lname):
        self.firstname = fname
        self.lastname = lname

부모 클래스는 상속을 하는 클래스로 슈퍼 클래스라고도 합니다.

 

자식 클래스

class Student(Person):
    pass

부모 클래스로부터 상속을 받는 클래스라고 합니다. 다른 말로는 서브클래스라고도 합니다

 

__init__() 함수 추가


class Student(Person):
    def __init__(self, fname, lname):

자식 클래스는 부모 클래스로부터 모든 것을 물려받는데 생성자 또한 상속받게 됩니다. 그래서 변수명이나 함수명은 중복이 불가능하기 때문에 생성자 또한 중복이 불가능할 것이다라고 생각할 수 있습니다. 하지만 위에 코드처럼 자식 클래스에서 생성자를 선언할 수 있습니다. 가능한 이유는 자식 클래스에서 부모 클래스의 생성자를 가렸기 때문에 선언이 가능합니다. 이러한 방식을 메소드 오버라이딩이라고 합니다. 메소드 오버라이딩은 생성자 뿐만 아니라 사용자 정의 함수 또한 가능합니다.

 

부모 클래스 생성자 호출

class Student(Person):
    def __init__(self, fname, lname):
        Person.__init__(self, fname, lname)

부모 클래스의 생성자를 호출하기 위해서는 위에 코드의 형식으로 부모 클래스를 호출해야 합니다.

class Student(Person):
    def __init__(self, fname, lname):
        super().__init__(fname, lname)

하지만 파이썬은 Java와 마찬가지로 super()라는 함수를 지원합니다. super()는 부모 클래스를 가리키며 Person 대신 super().__init__()을 사용하면 부모 클래스 또한 생성자로 객체 변수를 초기화할 수 있습니다.

 

자식 클래스의 필드와 메소드


class Student(Person):
    def __init__(self, fname, lname, year):
      super().__init__(fname, lname)
      self.graduationyear = year

    def welcome(self):
      print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)

Java와 마찬가지로 파이썬에서 자식 클래스는 상속을 받아도 새로운 필드와 메소드를 생성할 수 있습니다.

 

클래스의 특별한 메소드들


__init__(): 메소드 말고도 여러가지 특별한 메소드가 존재합니다.

  • __del__(): 메소드는 소멸자라고 불리며 생성자와 반대로 객체를 삭제할 때 자동으로 호출됩니다. del(객체)로 지우는데 이 때 호출됩니다.
  • __repr__(): 메소드는 객체를 print문으로 출력할 때 실행되는 메소드입니다.
  • __add__(): 메소드는 객체 사이에서 덧셈 작업이 일어날 때 실행되는 메소드입니다.

추상 메소드

class Persion:
    def run(self):
        pass

class Student(Person):
    def run(self):
        print("달립니다.")

p1 = Student()
p1.run()

슈퍼 클래스를 상속받은 서브 클래스에서 메소드를 재정의해 사용하는 것을 메소드 오버라이딩이라고 하였습니다. 추상 메소드는 슈퍼 클래스에 본체가 없지만 서브 클래스에서 반드시 오버라이딩해서 사용해야합니다.

 

출처

W3school

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

 

'개발 언어 (Language) > Python' 카테고리의 다른 글

파이썬 함수  (0) 2024.08.25
파이썬 문자열  (0) 2024.08.25
파이썬 리스트, 튜플, 딕셔너리  (0) 2024.08.25
파이썬 기초구문  (0) 2024.08.25