==
와 is
의 차이
==
는 오브젝트의 값이 같으면 True. 오브젝트 종류 상관X.is
는 값이 같아도 같은 오브젝트여야만 True. 오브젝트 종류 상관O인수
(argument)는 실제값, 매개변수
(parameter)는 자리
#필수인수 (여기서는 first_name, last_name)
def person_info(first_name, last_name):
print(f"Hello {first_name}, {last_name}!")
#키워드인수 (여기서는 "bob", "sponge")
person_info(last_name="bob", first_name="sponge")
#기본인수 (여기서는 'human')
def person_data(name, type_p='human'):
print(f"Hello {name}, you are {type_p}")
Raw string
: Escape에 영향받지 않고 그대로 표시print("골뱅이는 escape 시퀀스 때문에 삭제되겠지. @\b ")
print(r"골뱅이는 escape 시퀀스 때문에 삭제되겠지. @\b ")
출력 >>>>>
골뱅이는 escape 시퀀스 때문에 삭제되겠지.
골뱅이는 escape 시퀀스 때문에 삭제되겠지. @\b
>>> bool(0) # 정수 0은 없음을 의미하므로 거짓이다
False
>>> bool(1) # 0을 제외한 모든 정수는 참이다
True
>>> bool(None) # 없음을 의미하는 None은 거짓이다
False
# 그 외 모든 빈 자료형은 모두 False
# 자료형에 뭐라도 들어가있으면 True
isinstance
(확인하고자 하는 데이터 값, 확인하고자 하는 데이터 타입)>>> isinstance(33, int)
True
# __name__ 속성은 클래스를 문자열로
인스턴스명.__class__.__name__
# __doc__ 속성은 모듈, 함수, 클래스를 선언하고 그 다음 줄에 문자열을 지정
self.클래스명.__doc__
# __dict__ 속성은 객체의 변수를 딕셔너리 형태로
인스턴스.__dict__["메소드"]
# __class__ 속성은 특정 객체의 클래스를 파악하기 위해 사용
클래스.__class__
# __init__ 속성은 객체의 초기화
# __str__ 속성은 인스턴스에서 str()을 호출할 때
# __repr__ 속성은 인스턴스에서 repr()을 호출할 때
# __new__ 속성은 객체의 인스터스하에서 호출되는 첫 번째 메소드
# __del__ 속성은 객체 지울 때
# __getattr__ 속성은 존재하지 않는 속성에 액세스하려고 시도할 때
# __setattr__ 속성은 캡슐화를 위한 방법 정의
# __add__ 속성은 두 인스턴스를 더할 때
class cls:
a = 1
def b(self):
pass
# getattr(object, name[,default])
print(getattr(cls, 'a'))
>>> 1
# setattr(object, name, value)
setattr(cls, 'a', 7)
cls.a
>>>7
# hasattr(object, name)
print(hasattr(cls, 'b'))
>>> True
# mutable list id 확인
>>> a = [1, 2, 3]
>>> id(a)
4393788808
>>> a[0] = 5
>>> a
[5, 2, 3]
>>> id(a)
4393788808
# immutable str id 확인
>>> s= "abc"
>>> s
'abc'
>>> id(s)
4387454680
>>> s[0]
'a'
>>> s[0] = 's'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s = 'def'
>>> s
'def'
>>> id(s)
4388970768
얕은 복사
(shallow copy)와 깊은 복사
(deep copy) 참조mutable한 객체
를 얕은 복사
하면 한 쪽 값이 변경되면 다른 쪽도 변경됨. 그리고 같은 id 주소를 가짐.immutable한 객체
를 얕은 복사
하면 한 쪽 값이 변경되도 다른 쪽은 변경이 안 됨. 그리고 id 주소가 달라짐.깊은 복사
를 하면 내부의 객체들까지 싹 다 copy. copy.deepcopy 메소드로. __str__
과 __repr__
(str이 우선순위 더 높음)__str__
: 문자열화 해서 서로 다른 객체 간의 정보를 전달. 즉, 다른 객체에게 전달하고 싶으면 쓰고.__repr__
: 인간이 이해할 수 있는 표현. 사용자에게 보여주고 싶으면 쓰고.issubclass
(자식클래스, 부모클래스) 참조class JSS:
def __init__(self) :
self.name = input("이름 : ")
self.age = input("나이 : ")
def show(self) :
print(f"나의 이름은 {self.name}이고, {self.age}세입니다.")
class JSS2(JSS):
def __init__(self):
#부모클래스 그대로 쓰고 싶으면
super().__init__()
#추가 하고 싶은 내용
self.gender = input("성별 : ")
함수
: 단순한 계산, 단순한 변환 / 메소드
: 특정 객체에 대해서만 적용되는 기능생성자 함수 : 클래스가 인스턴스화 될 때 사용되는 함수.
#__init__이라는 생성자 함수, pokemon_a = 'pikachu'라는 기본값을 가지게 함.
class Pokemon:
def __init__(self, pokemon_a='pikachu'):
self.pokemon_a = pokemon_a
poke_a = Pokemon()
print(poke_a.pokemon_a)
>>>'pikachu'
`
@property
🏆ㅤ 학습 목표
🌱 Level 1 : Lecture Note 에 있는 주요 개념을 정의할 수 있으며 예제 코드를 이해하고 재현할 수 있다.
# python 3.7 이전
import pdb
pdb.set_trace()
>>> (Pdb)
# python 3.7 이상
breakpoint()
🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.
🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.
🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.