디버깅, pdb, 함수, 클래스, OOP(객체 지향적 프로그래밍), 데코레이터 (etc ..)
버그를 찾아 없애는 과정
으로만 생각하고 있었는데, 좀 더 넓게 생각하면, 내가 원하는대로 코드가 작동하는지 확인하는 전반의 과정
으로도 생각할 수 있다고 한다.pdb
라는 걸 사용하는 것에 대해서 배웠다.breakpoing()
만 적어도 디버깅이 가능하지만, 이 미만 버전은 import pdb
를 해주어야 하고, breakpoint()
대신 pdb.set_trace()
라는 메소드를 사용한다.n
, s
등을 통해 이동할 수 있는데, 원하는 곳에서 원하는 코드를 실행해보며 내가 기대한 값이 나오는지 확인하며 디버깅을 해나가는 방식이었다. c
onticue: 다음 중단점을 찾아 이동l
list: 주변 11 줄 코드 입력->
이 가르키는 부분 직전까지 실행된 것 헷갈리지 말기)s
tep: 다음 문장으로 이동n
ext: 다음 문장으로 이동built-in functions
는 내가 아는 sum()
등 파이썬 설치와 함께 사용할 수 있는 내장 함수를 말하는데, 이 내장함수는 가볍기 때문에, 만약 user-defined functions
와 내장함수 둘 다 사용 가능하다면 내장함수를 사용하는 것이 좋다고 한다. def person_info(first_name, last_name):
TypeError
가 발생한다.person_info(last_name="bob", first_name="sponge")
def person_data(name, type_p='human'):
type_p
인수를 넘기지 않으면 기본값을 저기 적은 걸로 한다는 거 보면, 이렇게 기본인수로 지정해도 내가 직접 값을 넣을 수는 있는 듯?return
과 print
의 차이: 단순 출력이냐, return된 값을 저장하고 쓸 수 있냐의 차이로 나는 표현해보았다. 클래스에 대해서는 예전에 점프 투 파이썬 볼 때, 쿠키틀과 쿠키, 계산기 만들기를 본 적이 있어서 이해하기 그래도 좀 쉬울 줄 알았는데 내용이 워낙 많아 머리에 집어넣기 바빴다ㅎ
클래스에 대해 설명하기에 앞서 파이썬의 특징인 객체 지향 언어에 대한 개념도 터치하고 갔다. 몰랐는데 절차 지향 언어
라는 것도 있더만? (차이에 대한 블로그 글 / 이 글에서는 두 개념이 완전히 상반되는 개념이 아니라고 강조하고 있다.)
객체 지향 언어에 대해서는 쉽게 표현한 그림, 영상이 정말 많아서 여기에 내가 보았던 자료를 옮기진 않겠다. 여하간 처음 파이썬 배울 떄 파이썬은 객체지향 언어라서 우리가 이해하기 쉽게 되어있다~
라는 말을 들었던 게 생각났다. 여하간 파이썬에서는 모든 것이 객체이다
라는 말을 기억하라고 한다!
클래스 생성하는 기본 문법은 이전과 같은 이유로 옮겨두지 않겠다.
클래스 내에서 작동하게 되는 함수들을 method
라고 부른다.
객체와 인스턴스의 차이는? 점투파의 설명이 아주 잘 되어있다.
self
에 대해서
클래스 만들고 안에 함수 선언할 때 등 self를 기본으로 깔고 들어가는 경우를 많이 봤는데, 만약 아래와 같은 코드에서 self를 넘겨주었다면,
class Pokemon:
pokemon_a = 'pikachu'
def print_pika(self):
print("pika")
다음과 같이 인수를 안 넘겨도 출력이 된다.
poke_a = Pokemon()
poke_a.print_pika() #=> 'pika'
쉽게 생각해 self는 클래스의 인스턴스 자체로 보아도 될 것 같다.
__init__
@property, getter, setter
는 오늘 실습도 해보긴 했는데, 보충 공부 필요하니 보충할 때 별도로 개념 정리 다시 해보자~
_
, __
의 차이 (single underscore, double underscore/dunderscore)
_
를 사용해 이건 클래스 내부 변수 혹은 함수다~ 라는 것을 암시한다고 하고, 밑줄이 존재하는 건 조심히 다뤄야 한다는 암묵적인 관습 아래 쓰인다고 한다._
를 넣고 -> 혹은 __
를 쓰는게, 단계적으로 다른 사람이 이 변수/함수는 좀 건들지 않아줬으면 한다는 의미가 강해지는 걸로 생각해도 되지 않을까 싶다. 클래스 상속
DRY(Don't Repeat Yourself)
)def last_deco(func): # func 는 실행할 함수입니다.
def last(): # 실행할 함수를 감싸는(wrap) 함수입니다.
func()
print("last")
return last
@last_deco
def my():
print("my 라는 함수입니다.")
@last_deco
def mine():
print("mine 이라는 함수입니다.")
@last_deco
def iam():
print("iam 이라는 함수입니다.")
import antigravity
, import this
도 신기하고 재밌었다. is
, ==
의 차이점: 다시 봤을 때 기억나지 않는 다면 이 글을 보자.isinstance()
: 오늘 실습할 때 문제에서 많이 봤던 함수인데, 만약 isinstance(1, int)
라고 하면, 1이 int인지 알아보겠다는 것이고, True 혹은 False로 알려준다. 사실상 오늘의 하이라이트였다.
- 과제는 74문제였고, assert 구문에 대한 답을 작성하는 것으로 구성되어 있었다.
- 오늘 배웠던 파이썬 개념들을 실제로 구동하며 확인해볼 수 있도록 넓은 스펙트럼으로 이루어져있었다.
더 해야할 것 간단 메모
__str__
과 __repr__
의 차이, __repr__
와 repr()
의 차이 등은 너무 너무 헷갈렸다.. 주말에 오늘 풀었던 문제 보면서 보충 공부 해야겠다. 구글링해서 글 봐도, 공식 문서 봐도 헷갈려~repr()
라는 내장함수를 쓴다고 했을 때, 내부 시스템적으로는 __repr__
등이 돌아가는 과정을 통해 결과를 출력한다~ 는 식으로 보았는데.. 맞나..!!?__str__
, __repr__
는 의미와 목적도 미묘하게 다르고, 특정 상황에선 특정 메써드가 우선 순위를 갖기도 하는 것 같은데 추가 공부 필수..super()
: 클래스 상속하면 부모 클래스 기능 기본적으로 다 사용할 수 있는데 이 기능은 뭐지? 아 부모클래스 특정 메소드 쓰고 싶을때 쓰는 듯? 더 찾아보자.