Language/기초문법

[Python] 오버라이딩, 추상클래스

Sh-YE 2024. 5. 20. 15:07

오버라이딩

: 하위 클래스에서 상위 클래스의 메서드를 재정의(override)

 

 

ex.  상위 클래스의 넓이 ->

       하위클래스에서 넓이 + ㎠ 로 재정의

class TriangleArea:

    def __init__(self, w, h):
        self.width = w
        self.height = h
        
    def printTriangleAreaInfo(self):
        print(f'width: {self.width}')
        print(f'height : {self.height}')

    def getArea(self):
        return self.width * self.height / 2
        
class NewTriangleArea(TriangleArea):
    def __init__(self, w, h):
        super().__init__(w, h)
    
    # 오버라이딩
    def  getArea(self):
        return str(super().getArea()) + '㎠'
        
ta = NewTriangleArea(7, 5)
ta.printTriangleAreaInfo()
triangleArea = ta.getArea()
print(f'triangleArea : {triangleArea}')

 

추상클래스

: 상위클래스에서 하위클래스에 메서드 구현을 강요한다.

 

사용이유? 공통적인 기능을 사용하는데 각자에 맞게 알아서 사용하기 위함.

 

 

from abc import ABCMeta
from abc import abstractmethod

class AirPlane(metaclass=ABCMeta):
	
    @abstractmethod
    def flight(self):
    	pass
        
    def forward(self):
    	print('전진!')
        
	def flight(self):
    	print('후진!')

class Airliner(Airplane):
	def __init__(self, c):
    	self.color = c               
        
al = Airliner('red')

 

위와 같이 flight를 구현하지 않으면 에러가 난다.

아래 코드와 같이 flight 구현

from abc import ABCMeta
from abc import abstractmethod

class AirPlane(metaclass=ABCMeta):
	
    @abstractmethod
    def flight(self):
    	pass
        
    def forward(self):
    	print('전진!')
        
	def flight(self):
    	print('후진!')

class Airliner(Airplane):
	def __init__(self, c):
    	self.color = c
     def flight(self):
     	print('시속 400km/h 비행')
        
al = Airliner('red')
al.flight()
al.forward()
al.backward()