에러가 진짜 해결이 안될 때
1. 제일 나중에 수정했던 코드 제거해서 문제가 없는지 확인
2. 오류가 발생한 부분 계속 좁히기
continue : 다음 중단점을 찾아 이동
list : 주변 11줄의 코드 출력
step : 다음 문장으로 이동
- 다음 문장이 A함수라면 A함수 내부에서 추가 탐색을 진행
- A 함수 call부터 시작
next : 다음 문장으로 이동
- 다음 문장이 A함수라면 A함수의 return값을 반환
- 내부로 들어가지 않음
- 함수가 있어도 넘어감
매개변수(parameter) : 함수를 호출할 때 인수로 전달된 값을 함수 내부에서 사용할 수 있게 해주는 변수
인수(argument) : 함수를 호출할 때 함수에 전달하는 입력값
rf : https://plan2018.tistory.com/202
def 함수_이름 (파라미터):
"함수 문서"
함수 내용
retun [표현식]
return : 함수에서 어떤 결과 값을 반환하고자 사용
print : 값을 출력해주고자 사용
++ pass : 공간만 차지하고 문법상 오류가 나지 않도록 사용
class가 인스턴스화 된다 = class를 정의하고 사용하겠다는 순간에 메모리 탑재. 그 순간을 말한다. like 붕어빵
class도 하나의 틀
함수를 사용하는 것처럼 코드를 다시 작성하는 것을 줄이기 위해 사용합니다.
함수, 클래스, 데코레이터 모두 코드의 재사용성을 줄이기 위해 사용.
코드의 군더더기 ↓
부모 클래스의 내용(속성,메서드)을 물려받는 자식 클래스가 갖게 되는 것
클래스 상속시 부모 클래스에서 정의한 메서드(함수)를 자식 클래스에서 변경하는 것
기본으로 클래스 생성
class person:
person_a = "김도영"
# 클래스 속성 접근
person.person_a #->'김도영'
클래스 내에 함수를 선언
클래스 내에서 작동하게 되는 함수들은 메서드(method)
class person:
person_a = "김도영"
def print_person():
print("NCT")
# 클래스 내의 함수 접근
person.print_person() #->NCT
인스턴스에서도 활용 가능한 함수를 만들기 위해 'self'사용
self는 다른 키워드로 작성해도 가능함
class person:
person_a = "김도영"
def print_person():
print("NCT")
NCT_a = person()
NCT_a.print_person()
이렇게 정의 했을 때는
TypeError: print_person() takes 0 positional arguments but 1 was given 에러가 난다.
파라미터 설정이 안되어있어 필수 인수가 0이라 불일치 현상이 발생했기 때문이다.
따라서
class person:
person_a = "김도영"
def print_person(nct): # nct대신 self로 넣어줘도 됨
print("NCT")
NCT_a = person()
NCT_a.print_person() #-> nct출력
클래스가 인스턴스화(instantiate) 될 때 사용
class person:
def __init__(self, person_a = "김도영"):
self.person_a = person_a
NCT_a = person()
print(NCT_a.person_a) #-> 김도영
인스턴스마다의 속성이지 클래스 전체에 대한 속성X
클래스 자체에서 속성에 접근은 어려움
person.person_a # Attribute에러
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
def full_name(self):
return self.first_name + ' ' + self.last_name
fred = Person('이', '도영')
fred.first_name = '김'
print(fred.first_name) #=> '김'
print(fred.full_name()) #=> '김 도영'
# full_name() 함수로 접근
클래스의 특성이 아닌 하나의 메소드로 접근해야함
class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property
def full_name(self):
return self.first_name + ' ' + self.last_name
fred = Person('이', '도영')
fred.first_name = '김'
print(fred.first_name) #=> '김'
print(fred.full_name) #=> '김 도영'
# 클래스의 특성처럼 접근
getter
: 어떤 것을 가져오는 것setter
: 값을 설정해주는 행동class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
@property # getter에 해당
def full_name(self):
return self.first_name + ' ' + self.last_name
@full_name.setter # setter에 해당
def full_name(self, new_full_name):
first_name, last_name = new_full_name.split()
self.first_name = first_name
self.last_name = last_name
nct_a = Person('김', '도영')
print(nct_a.first_name) # 김
print(nct_a.full_name) # 김 도영
# setter가 있기때문에 황인준이 출력 가능
# 없으면 김도영으로 계속 출력
nct_a.full_name = '황 인준'
print(nct_a.first_name) # 황
print(nct_a.last_name) # 인준
print(nct_a.full_name) # 황 인준
def first_deco(func): # func 는 실행할 함수입니다.
def first(): # 실행할 함수를 감싸는(wrap) 함수입니다.
print("first")
func()
return first #first 함수를 return합니다
@first_deco
def my():
print("my 라는 함수입니다.")
@first_deco
def mine():
print("mine 이라는 함수입니다.")
@first_deco
def iam():
print("iam 이라는 함수입니다.")
my()
mine()
iam()
def first_last_deco(func): # func 는 실행할 함수입니다.
def first_last(*args, **kwargs): # 실행할 함수를 감싸는(wrap) 함수입니다.
print("first")
func(*args, **kwargs)
print("last")
return first_last
@first_last_deco
def you(name):
print(f"{name}! Hello")
파이썬rf : https://velog.io/@lupin7?tag=python
🍕 오늘의 회고
우와! 생각보다 더 어렵다! 파이썬은 쉽다면 쉽고 어렵다면 어렵다는 말이 이제야 이해가 된다. ㅎㅋㅎㅋ 난 손만 담궜던 수준이었음ㅠ 쥬륵.... 용어들이 제대로 잡혀있지 않으니까 이해가 두배는 어렵다. 과제는 어떻게 한담? 시도도 못했음 아직....힝입니다!!!!!!!