자유/대외 활동

파이썬 중급, 인프런 리프 #2. 파이썬 클래스 심화, 데이터 모델 후기

Chipmunks 2021. 3. 21.
728x90

안녕하세요, 인프런 리프 2기 다람쥐예요!

두 번째 주차에는 파이썬 클래스 심화와 데이터 모델을 공부했어요.

파이썬 클래스 심화에선 클래스 변수, 인스턴스 메서드, 클래스 메서드, 스태틱 메서드를 배웠어요.

파이썬 데이터 모델에선 연산자와 관련한 매직 메서드를 실습했어요.

어떤 점을 새로 배웠는지 후기를 작성해 보려고 해요.

 

메서드가 많다 보니 강의에서 꼼꼼이 따라할 수 있도록 강의를 짧게 끊어서 집중하기가 쉬웠어요.

중간 중간 쉬는 타임에 정리할 수 있는 시간이 있어서 좋았어요.

 

※ 본 리뷰는 인프런, 우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original) 강의를 리뷰하였어요.

 

[진도표]

우리를 위한 프로그래밍 : 파이썬 중급 1주차

  1. 파이썬 중급 소개 & 커리큘럼
  2. 파이썬 클래스 심화현재
  3. 파이썬 데이터 모델현재
  4. 파이썬 시퀀스
  5. 파이썬 일급 함수
  6. 파이썬 병행성
  7. 최종 실습 - AsyncIO 멀티 스크래핑 실습

 

 

2. 파이썬 클래스 심화

클래스 변수와 인스턴스 메서드, 클래스 메서드, 스태틱 메서드를 학습했어요.

클래스 변수는 같은 클래스 안에서 공유할 수 있어, 어느 인스턴스에서든 값을 공유할 수 있다는 특징이 있었어요.

 

데코레이터 @staticmethod, @classmethod 으로 스태틱 메서드와 클래스 메서드를 클래스 안에서 정의할 수 있어요.

각 메서드의 차이점이 무엇인지 정리하고 넘어가는게 좋을 듯 했어요.

 

인스턴스 메서드는 메서드의 첫 파라미터가 반드시 있어야 하는데요.

해당 인스턴스를 참조하기 위한 변수가 같이 넘어와요.

관습적으로 self 라는 이름으로 파라미터 이름을 설정한다고 하네요.

다른 객체지향 언어에선 메서드의 파라미터로 넣지 않고 곧바로 this 등의 키워드로 접근이 가능한 반면,

파이썬 클래스에선 인스턴스를 받는 파라미터가 반드시 처음에 있어야 하며,

그 파라미터 변수로 현재 인스턴스에 접근할 수 있다는 특징이 있네요.

def get_price(self):
    return 'Before Car Price -> company : {}, price : {}'.format(self._company, self._details.get('price'))

print(car.get_price())

 

클래스 메서드는 메서드 또한 첫 파라미터가 반드시 있어야 합니다.

인스턴스 메서드는 현재 인스턴스 객체를 받았지만, 클래스 메서드에선 현재 클래스 객체가 넘어옵니다.

이를 관습적으로 cls 라는 이름으로 붙인다네요.

@classmethod
def raise_price(cls, per):
    if per <= 1:
        print('Please Enter 1 or More')
        return
    cls.price_per_raise = per
    return 'Succeed! price increased.'

스태틱 메서드는, 인스턴스 메서드와 클래스 메서드와 달리 첫 번째 파라미터로 받지 않아도 돼요.

예제 코드에서는 스태틱 메서드의 파라미터로 인스턴스를 받아 처리했는데요.

# Static Method
@staticmethod
def is_bmw(inst):
    if inst._company == 'Bmw':
        return 'OK! This car is {}.'.format(inst._company)
    return 'Sorry. This car is not Bmw.'

 

다만, 스태틱 메서드와 클래스 메서드의 구분이 모호한 감이 없지 않아요.

클래스 메서드를 두고 스태틱 메서드를 굳이 사용해야 하는 이유가 없다는 의견이 많다네요.

강사님도 이 부분을 콕 찝어주셔서 클래스 메서드와 스태틱 메서드의 차이를 언급해 주셨어요.

자세한 차이는 첨언해주신 링크를 참고했어요!

 

첫 번째 근거로 스태틱 메서드는 클래스 변수를 사용하려면 직접 클래스에 접근해야 하는데요,

클래스 메서드는 첫 번째 파라미터로 클래스 객체를 받기에 보다 편하게 접근이 가능해요.

 

두 번째 근거로 클래스 상속관계에 있을 때 클래스 메서드의 첫 번째 클래스 객체 인자로 다형성을 구현할 수 있는데요,

반면 스태틱 메서드로는 직접 클래스 이름으로 접근해야 해서 다형성을 구현할 순 없더군요.

class Parent:
    data = "default data"
    
    def __init__(self, data):
        self.data = data
        
    @classmethod
    def now(cls, data):
        cls(data)

class Child(Parent):
	data = "child data"

child = Child.now()
print(child.data) # child data

 

3. 파이썬 데이터 모델

데이터 모델에선 클래스에서 연산자 오버로딩을 어떻게 하는지 알아봤어요.

클래스 인스턴스 간에 사칙 연산, 부등호 연산, bool 등, 파이썬 클래스에서 제공하는 매직 메서드로 손쉽게 오버로딩이 가능해요.

파이썬 공식 문서 3. Date model 에 자세히 나와있네요.

강사님이 대표적인 매직 메서드들을 꼼꼼이 소개 시켜줘서 한 눈에 알 수 있었어요.

 

def __ge__(self, x):
    print('Called >> __ge__ Method.')
    if self._price >= x._price:
        return True
    else:
        return False

def __le__(self, x):
    print('Called >> __le__ Method.')
    if self._price <= x._price:
        return True
    else:
        return False

def __sub__(self, x):
    print('Called >> __sub__ Method.')
    return self._price - x._price

 

연산자 오버로딩이 가능한 언어로 C++ 을 경험했었는데, C++ 에서 구현하는 방식보다 훨씬 간단하고,

통일감 있는 매직 메서드로 정리하니 코드 읽기도 훨씬 쉽네요.

 

마지막으로 namedtuple 이라는 기존 tuple 에 이름을 붙여 데이터를 저장할 수 있도록 하는 실습을 했는데요,

타 언어의 구조체와 유사해 보였습니다. 개인적으로는 멤버 변수가 있는 클래스를 사용하는게 좋아보이긴 하네요.

어쩔 수 없이 튜플을 사용해야할 때, namedtuple 을 사용하면 가독성 있게 작성할 수 있어 보이네요!

namedtuple 을 처음 들어보았는데, 꼼꼼하게 알려 주셔서 익히기 쉬웠습니다!

 

# 네임드 튜플 사용
from collections import namedtuple

# 네임드 튜플 선언
Point = namedtuple('Point', 'x y')

# 두 점 선언
pt3 = Point(1.0, 5.0)
pt4 = Point(2.5, 1.5)

# 계산
l_leng2 = sqrt((pt4.x - pt3.x) ** 2 + (pt4.y - pt3.y) ** 2)

# 출력
print(l_leng2)
print(l_leng1 == l_leng2)

본 리뷰는 인프런, 우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original) 강의를 리뷰하였어요.

독자분들도 같의 강의를 듣고 서로 모르는 부분은 이야기 해보면 좋을 것 같아요.

다 같이 성장할 수 있도록 저도 열심히 학습하겠습니다!

다음 시리즈 글도 기대 부탁드려요~

- 인프런 리프 2기 시리즈 글

1. 파이썬 중급, 인프런 리프 #1. 파이썬 환경 설정 후기

 

파이썬 중급, 인프런 리프 #1. 파이썬 환경 설정 후기

안녕하세요, 인프런 리프 2기 다람쥐예요! 첫 주차에는 파이썬 환경 설정을 들었어요. 제가 설정한 파이썬 환경 설정을 이야기해보려고 해요. 동영상 강의와 다른 내용도 있기에 관련 자료도 열

itchipmunk.tistory.com

2. 파이썬 중급, 인프런 리프 #2. 파이썬 클래스 심화, 데이터 모델 후기 <- 현재

 

파이썬 중급, 인프런 리프 #2. 파이썬 클래스 심화, 데이터 모델 후기

안녕하세요, 인프런 리프 2기 다람쥐예요! 두 번째 주차에는 파이썬 클래스 심화와 데이터 모델을 공부했어요. 파이썬 클래스 심화에선 클래스 변수, 인스턴스 메서드, 클래스 메서드, 스태틱

itchipmunk.tistory.com

3. 파이썬 중급, 인프런 리프 #3. 파이썬 시퀀스, 파이썬 일급 함수 후기

 

파이썬 중급, 인프런 리프 #3. 파이썬 시퀀스, 파이썬 일급 함수 리뷰

반갑습니다람쥐, 인프런 리프 2기 다람쥐입니다! 세 번째 주차에는 파이썬 시퀀스와 파이썬 일급 함수를 공부했어요. 파이썬 시퀀스 강의에선 컨테이너와 해시 테이블을 배웠어요. 파이썬 일급

itchipmunk.tistory.com

4. 파이썬 중급, 인프런 리프 #4. 파이썬 병행성, 비동기 AsyncIO 멀티 스크랩핑 실습 후기

 

파이썬 중급, 인프런 리프 #4. 파이썬 병행성, 비동기 AsyncIO 멀티 스크랩핑 실습 후기

안녕하세요. 인프런 리프 2기 다람쥐입니다. 네 번째 주차에는 파이썬 병행성과 비동기 AsyncIO 멀티 스크랩핑을 공부했어요. 파이썬 병행성 강의에선 많은 것을 배웠는데요, 먼저, 첫 강의에선

itchipmunk.tistory.com

5. 파이썬 중급, 인프런 리프 #5. 인프런 리프 2기 활동 후기

 

파이썬 중급, 인프런 리프 #5. 인프런 리프 2기 활동 후기

안녕하세요, 🐿다람쥐입니다! 🌱인프런 리프 2기 🌱를 시작한 지 벌써 한 달이 지났네요. 글 보러가기 : [대학생 IT 온라인 서포터즈] 🌿 인프런 리프 2기 진솔한 오리엔테이션 회고 [대

itchipmunk.tistory.com

 

 

댓글