본문 바로가기
코딩 연습/코딩배우기

[python] 파이썬 클래스 상속(inheritance)

by good4me 2020. 9. 10.

goodthings4me.tistory.com

 

■ 파이썬의 클래스 상속(inheritance)

# 부모클래스가 갖는 모든 메서드가 자식클래스에도 담긴다.
# 자식클래스에는 별도의 메서드를 추가할 수 있다.

class Father:
    def run(self):
        print('so fast..!')


class Son(Father):
    def jump(self):
        print('so high..!')


def main():
    s = Son()
    s.run()  # so fast..!  / 상속된 메서드
    s.jump()  # so high..!  / 추가된 메서드

main()

 

■ 메서드 오버라이딩

# 상속 관계에서 부모클래스의 메서드와 동일한 이름의 메서드를 자식클래스가 정의하는 것
# 이 경우, 부모메서드는 보이지 않는 상태가 된다.(호출 불가 상태)

class Father:
    def run(self):
        print('so fast..!')
        
        
class Son2(Father):
    def run(self):  # Father 클래스의 run 메서드 가림(오버라이딩)
        print("so fast, son's style")


def main():
    s2 = Son2()
    s2.run()  # so fast, son's style  / Son2의 run 메서드 호출
    
main()
      
# Son2의 객체에는 Father의 run과 Son2의 run이 모두 존재한다.

 

# Father의 run이 가려졌을 뿐, 가려진 run도 호출할 수 있다.

class Father:
    def run(self):
        print('so fast..!')
        

class Son3(Father):
    def run(self):
        print("so fast, son's style")
    
    def run2(self):
        super().run()  # 부모클래스의 run() 호출 (가려진 run)


def main():
    s3 = Son3()
    s3.run()  # so fast, son's style
    s3.run2()  # so fast..!

main()

 

good4me.co.kr

 

■ __init__ 메서드 오버라이딩

class Car:
    def __init__(self, carnumber, fuel):
        self.carnumber = carnumber
        self.fuel = fuel
    
    def drive(self):
        self.fuel -= 10
    
    def add_fuel(self, f):
        self.fuel += f
    
    def show_info(self):
        print('car type :', self.carnumber)
        print('fuel :', self.fuel)
    

class Truck(Car):
    def __init__(self, carnumber, fuel, c): # 부모클래스 변수 초기화값도 같이 전달받음
        super().__init__(carnumber, fuel)  # 부모 __init__ 호출 / 변수 초기화
        self.cargo = c  # 자식 변수 초기화
            
    def add_cargo(self, c):
        self.cargo += c
    
    def show_info(self):
        super().show_info()  #부모클래스 show_info 메서드 호출
        print('cargo :', self.cargo)


def main():
    t = Truck('43럭5959', 0, 0)
    t.add_fuel(100)
    t.add_cargo(50)
    t.drive()
    t.show_info()

main()



[실행 결과]

car type : 43럭5959
fuel : 90
cargo : 50

 

[참고자료] 윤성우의 열혈파이썬 중급편

 

댓글