[Python] Class

haejun-kim·2020년 6월 24일
0

[Python]

목록 보기
7/19
post-thumbnail

클래스

  • 함수보다 더 큰 기능을 하나로 모아서 큰 덩어리

클래스에 대한 정의를 공부하면 항상 나오는 예시가 있다. 붕어빵과 붕어빵을 만드는 틀이다.
붕어빵을 매번 만드는것이 아니라 붕어빵 틀을 만들어놓고 틀에 맞게 찍어내면 훨씬 효율적인 생산이 된다. 여기서 붕어빵은 객체, 붕어빵의 틀은 클래스의 역할을 한다.

붕어빵 = 객체
클래스 = 객체를 만드는 위해 필요한 설계도(틀)

클래스 구현

class FishCakeMaker:
    def __init__(self, parameter):
        self._fish_name = parameter
        pass # 작성할 코드 구현

__init__(self) : 생성자. 클래스가 최초 생성될 때 호출 된다. 클래스가 생성이 되는 순간 그 때 실행이 되는 코드를 구현한다.

self() : 클래스의 멤버 함수와 변수에는 항상 self가 붙어야 한다.
위의 코드에서 매개변수인 parameter 값을 설정하고 싶으면 아래와 같이 추가해주면 된다.

class FishCakeMaker:
    def __init__(self, parameter):
        self._fish_name = parameter
        pass # 작성할 코드 구현

self가 들어감으로써 코드를 보고, '이 함수는 self가 들어갔기 때문에 FishCakeMaker 클래스에 속하는 함수다. 또한 _fish_name 변수도 self가 들어갔기 때문에 FishCakeMaker 클래스에 속하는 변수다.' 라고 이해할 수 있다.

파이썬에서는 클래스 내부에 생성된 함수와 클래스 밖에서 정의된 함수의 이름이 같은 경우 (1 번과 2번) 어디에 있는 함수를 사용하라는건지 구분할 수 있는 방법이 없다.

def show_name(): # ---------- 1
    print("A")   
    
class FishakeMaker:
    def __init__(self, parameter):
        self._fish_name = parameter
        pass
    def show_name(): # ----------- 2
    print("A")

그렇기 때문에 클래스 내부에 있는 멤버 함수의 경우 클래스에 속해 있는 함수라는 것을 알려주기 위해서 self를 사용한다.

상속

자식클래스가 부모클래스의 기능을 물려받아서 부모클래스의 기능까지 사용할 수 있는 것

상속 구현

class MarketGoods(FishCakeMaker):
    def __init__(self, margin=1000, **kwargs):
        super().__init__(**kwargs)
        self._market_price = self._price + margin

위에서 만든 FishCakeMaker 클래스를 새로운 클래스은 MaketGoods가 상속받았다. 상속을 시키는것은 클래스를 정의할 때 뒤의 ()에 상속 할 클래스를 적어주면 된다.
여기서 중요한 점은 부모 클래스의 기능을 사용하기 위해선 super()를 사용해야한다는 것이다.

위의 예시를 보면 MaketGoods 클래스에서는 self._price를 선언한 적이 없다. 하지만 FishCakeMaker 클래스를 상속받았고, 상속 해 준 부모 클래스인 FishCakeMaker 클래스에는 self._price가 선언되어 있기 때문에 사용할 수 있게 된 것이다.

class MarketGoods(FishCakeMaker):
    def __init__(self, margin=1000, **kwargs):
        super().__init__(**kwargs)
        self._market_price = self._price + margin
    def show(self):
        print(self._flavor, self._market_price)

fish1 = MarketGoods(size=20, price=500)
fish1.show()

실행결과

price500으로 했지만 결과는 1500이 나왔다. 이러한 이유는 부모 클래스에서의 price 500 에 자식 클래스에서의 margin 1000 이 있기에 두 값이 더해져서 self.market_place값이 1500이 됐고, 그 값을 print 해주었기 때문이다.

이처럼 상속은 클래스를 확장해서 사용하는 경우에 주로 사용된다.

0개의 댓글