본문 바로가기

Python

[Python] 상속과 오버라이딩

Java에서는 생성자가 상속되지 않지만,

Python에서는 생성자를 상속받을 수 있습니다.

멤버변수 역시 생성자에서 결정하기 때문에

생성자를 상속 안해주면

멤버 변수가 상속되지 않습니다.

 

그럼 상속받는 방법을 알아볼까요?

 

class Avengers:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def attack(self):
        print('공---격')
    def printInfo(self):
        print(self.name)
        print(self.age)

 

먼저 상속할 클래스를 만들어줍니다.

Avengers라는 클래스이며

생성자, attack메소드, printInfo라는 정보출력 메소드를 가지고 있습니다.

 

class Ironman(Avengers):

 

다음은 상속받을 클래스를 만들어줄건데요.

이때 파라미터로 만들어둔 상속클래스의 이름을 넣어줍니다.

이러면 오버라이딩도 할 수 있는데요.

오버라이딩이란 상속받은 메소드의 기능을 바꾸는 것 을 의미합니다.

 

def __init__(self, name, age, suitType):
        Avengers.__init__(self, name, age) #overriding
        self.suitType = suitType

 

생성자를 오버라이딩 해보겠습니다.

기존 생성자와 이름을 같게하고,

파라미터로 suitType이라는 멤버변수를 추가했습니다.

이때 오버라이딩 하기 위해서는

상속받을 클래스의 메소드를 호출해줘야합니다.

 

        Avengers.__init__(self, name, age) #overriding

 

여기서는 이 코드가 호출하는 부분입니다.

그리고 추가할 멤버 변수인 suitType을 초기화시켜줬습니다.

 

 def attack(self):
        #Avengers.attack(self)
        super().attack()
        print("탈모빔 발4 ~~~~")

 

다음으로 attack도 overriding해볼건데요.

역시 상속받을 클래스의 메소드를 호출해야하는데 

이때는 두가지 방법이 있습니다.

 

 Avengers.attack(self)

 

해당 객체의 메소드를 직접 호출하는 방식과

 

      super().attack()

 

super()로 상위클래스에 접근해서

상위클래스(상속받을 클래스)의 attack메소드에 접근하는 방법입니다.

 

def printInfo(self):
        Avengers.printInfo(self)
        print(self.suitType)

 

출력메소드 역시 멤버 변수를 추가했으므로

Overriding했습니다.

 

클래스를 상속받았으니

객체를 생성해서

상속이 잘 이루어졌는지 확인해봅시다.

 

if __name__ == "__main__":

    h = Hulk("안토니", 24, "100")
    h.attack()
    h.printInfo()
    print('----------------')
   

 

if __name__ == "__main__":

 

이떄 if문에 해당 조건을 쓰는 이유는

import 하지 않았을 때,

즉, 직접 실행할 때만 해당 코드가 실행되기 하기 위함입니다.

Hulk 객체에 멤버 변수를 집어넣어서 객체를 하나 생성해주었고,

객체의 attack 메소드와 printInfo메소드를 각각 실행했습니다.

출력을 확인해볼까요?

 

 

Avengers 클래스의 attack기능인

공---격이 출력되었고,

Hulk 클래스의 각 기능들이

상속받아져서 잘 출력되는 것을 확인할 수 있습니다.

 

이번시간에는 파이썬에서 상속하는 방법과

Overriding하는 방법을 알아봤습니다.

'Python' 카테고리의 다른 글

[Python] 예외처리  (1) 2025.03.06
[Python] 다중 상속  (0) 2025.03.06
[Python] Class  (0) 2025.03.05
[Python] Up Down 게임  (0) 2025.03.05
[Python] 로또 번호 뽑기  (0) 2025.03.05