IT/파이썬 기초

[파이썬 기초] 상속, 다중상속

Daniel_5 2023. 7. 13. 17:02
반응형

상속

- 상속이란 말 그대로 무언가를 그대로 넘겨준다는 뜻이다. 
- 파이썬에서 상속을 해주는 클래스를 부모 클래스라고 하고 상속을 받는 클래스를 자식 클래스라고 부른다. 

 

상속을 하는 이유?

- 클래스를 정의하려고 하다 보면 클래스들의 공통되는 특징들이 있다. 

- 예를들어 사과, 바나나, 포도, 딸기 클래스를 정의하고 싶다고 하면 공통적으로 이름, 맛,  재배지, 색, 가격 등 공통적인 특성들이 있는데

- 이럴 경우 상속을 이용하여 공통되는 특징들은 부모 클래스에 정의를 해두고 그 부모 클래스로 부터 특징들을 상속받아 코드를 매번 작성하는 번거로움 없이 쉽게 프로그래밍 할 수 있다. 

 

상속 예제 코드

class Fruit:

    def __init__(self, name, taste, color, price):
        self.name= name
        self.taste = taste
        self.color = color
        self.price = price

        print('과일의 이름은 {}입니다.'.format(self.name))
        print('과일의 맛은 {}합니다.'.format(self.taste))
        print('과일의 색은 {}입니다.'.format(self.color))
        print('과일의 가격은 {}입니다'.format(self.price))
class Apple(Fruit):

    def __init__(self,name,taste,color,price):
        Fruit.__init__(self,name,taste,color,price)

class Banana(Fruit):

    def __init__(self,name,taste,color,price):
        Fruit.__init__(self,name,taste,color,price)

class Grape(Fruit):

    def __init__(self,name,taste,color,price):
        Fruit.__init__(self,name,taste,color,price)    
 
 
apple1 = Apple('사과','상큼','빨간색','1000원')
print()
banana1 = Banana('바나나','달콤','노란색','500원')
print()
grape1 = Grape('포도','달콤','보라색','2000원')

출력 결과

 

- 이와 같이 중복되는 특성들을 상속받음으로써 매번 각 클래스 안에 공통되는 내용을 코딩할 필요가 없어진다. 


다중 상속

- 말 그대로 여러 클래스로부터 상속을 받는다는 뜻이다. 
- 클래스를 생성할 때 공통되는 부분이 A클래스에도 있고, B클래스에도 있다면 A클래스와 B클래스를 모두 상속받아 코딩을 효율적으로 하자 

 

다중 상속을 하는 이유?

과일 중 수입과일이 있다고 가정해 보자. 

수입과일은 수입 국가와 통관번호를 갖는다. 마침 수입과 관련된 클래스가 정의되어 있다고 하면 

수입과일은 과일 클래스와 수입 클래스에서 다중 상속을 받는다면 특별한 코드 추가 없이 클래스를 정의할 수 있다.

 

다중 상속 예제 코드

class Fruit:

    def __init__(self, name, taste, color, price):
        self.name= name
        self.taste = taste
        self.color = color
        self.price = price

        print('과일의 이름은 {}입니다.'.format(self.name))
        print('과일의 맛은 {}합니다.'.format(self.taste))
        print('과일의 색은 {}입니다.'.format(self.color))
        print('과일의 가격은 {}입니다'.format(self.price))

class Importation:

    def __init__(self, country, number):
        self.country = country
        self.number = number

        print('{}국가로부터 수입이 되었습니다.'.format(self.country))
        print('통관번호는 {}입니다.'.format(self.number))

Fruit 클래스와 Importation 클래스 정의( 부모 클래스)

class Banana(Fruit, Importation):

    def __init__(self,name,taste,color,price, country, number):
        Fruit.__init__(self,name,taste,color,price)
        Importation.__init__(self,country, number)

Banana 클래스의 정의 클래스를 정의하는데 클래스명옆에 Fruit과 Importation을 명시해 주어 상속을 받았다. 

부모 클래스의 생성자를 통하여 초기화를 하였음.

banana1 = Banana('바나나','달콤','노란색','500원','필리핀','592302')

banana 객체 생성

출력 결과

 


 

 

반응형