python/기초

[파이썬 기초] Class를 알아보자.[2]

끼발자 2022. 5. 30. 13:45
반응형

객체, 즉 오브젝트에 관한 수업이나 자료를 읽었다면 반드시 들어본 단어가 있다.

<상속> 이라는 용어인데, 간단하게 클래스의 속성을 가지고온다라고 생각하면 이해하기 쉽다.

상속

이전 포스트에서 만들었던 Sandwich를 조금 추가해서 사용해보자.

class Sandwich:
    def __init__(self, bread, **kwargs):
        self.bread = bread
        self.topping = kwargs
        for k,v in kwargs.items():
            exec (f'self.{k} = v')

    def price(self):
        return sum(self.topping.values())

price라는 함수를 정의했고, 추가로 전달받은 kwargs에 있는 value만 가지고 가격을 정해주는 함수이다.

여기서 입지가 너무 좋은곳에 샌드위치점을 만들고싶다. 하지만, 가격을 추가 토핑만을 가지고 정하면 단가가 맞지않으니,

기존 가격의 1.5배를 받고싶다. 그럼 위의 클래스와 동일하지만, 일부만 다른 새로운 클래스를 만들어야할까?

프로그래밍적 관점에서 비슷한 코드를 다시 적는건 생산성이나 효율성 어떤 면에서도 반갑지않다. 

동일한 기능의 코드가 여러개 있다면, 변경할 때 하나하나 다 바꿔주는게 사실상 비효율적이기때문에.

그렇다면 우리는 Sandwich와 동일한 생성자를 가진 클래스 즉 자식클래스를 만들어보자.

class PremiumSandwich(Sandwich):
    def new_price(self):
        return sum([i*1.5 for i in self.topping.values()])
me = Sandwich(bread='honey', lecture=3, olive=4)
you = PremiumSandwich(bread='honey', lecture=3, olive=4)
print(me.price(),you.new_price(),you.price())
# 7 10.5 7

자, PremiumSandwich에는 생성자가 없다. 아래 print문을 보면 you는 PremiumSandwich의 객체인데, price로 선언된 함수는 없다.

그럼에도, Class를 선언할 때, Sandwich를 상속받겠다고 미리 선언을 했기 때문에, 상속받은 클래스의 함수들을 사용할 수 있게된다.

반응형