Section3. N321 Python

포동동·2022년 6월 8일
0
  • ==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

  • False으로 표시되는 것
>>> bool(0)       # 정수 0은 없음을 의미하므로 거짓이다
False

>>> bool(1)       # 0을 제외한 모든 정수는 참이다
True

>>> bool(None)    # 없음을 의미하는 None은 거짓이다
False

# 그 외 모든 빈 자료형은 모두 False
# 자료형에 뭐라도 들어가있으면 True

  • isinstance(확인하고자 하는 데이터 값, 확인하고자 하는 데이터 타입)
    • 첫 번째 매개변수 : 확인하고자 하는 데이터의 값, 객체, 인스턴스
    • 두 번째 매개변수 : 확인하고자 하는 데이터의 타입, 클래스
    • 반환 값 : 인스턴스와 타입이 같으면 True를 반환하고, 다르면 False를 반환합니다.
>>> isinstance(33, int)
True

  • 클래스 매직 메소드
# __name__ 속성은 클래스를 문자열로
인스턴스명.__class__.__name__

# __doc__ 속성은 모듈, 함수, 클래스를 선언하고 그 다음 줄에 문자열을 지정
self.클래스명.__doc__

# __dict__ 속성은 객체의 변수를 딕셔너리 형태로
인스턴스.__dict__["메소드"]

# __class__ 속성은 특정 객체의 클래스를 파악하기 위해 사용
클래스.__class__

# __init__ 속성은 객체의 초기화

# __str__ 속성은 인스턴스에서 str()을 호출할 때

# __repr__ 속성은 인스턴스에서 repr()을 호출할 때

# __new__ 속성은 객체의 인스터스하에서 호출되는 첫 번째 메소드

# __del__ 속성은 객체 지울 때

# __getattr__ 속성은 존재하지 않는 속성에 액세스하려고 시도할 때

# __setattr__ 속성은 캡슐화를 위한 방법 정의

# __add__ 속성은 두 인스턴스를 더할 때 


  • getattr, setattr, hasattr, delattr
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과 immutable 참조
    • mutable : list, set, dictionary 등
    • immutable : string
# 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__ : 인간이 이해할 수 있는 표현. 사용자에게 보여주고 싶으면 쓰고.


  • dir() : 특성 객체의 메소드 파악할 때

  • issubclass(자식클래스, 부모클래스) 참조
    • 첫 번째 인자 : 포함당하는지(포함되는지) 확인하려는 자식 클래스(서브클래스), 데이터 타입
    • 두 번째 인자 : 포함하는지 확인하려는 부모 클래스(기반 클래스), 데이터 타입
    • 결과 : 첫 번째 인자가 두 번째 인자에 포함되면 True, 그렇지 않으면 False.즉, 자식 클래스가 부모 클래스 내에 포함되면 True를 반환하고 그렇지 않으면 False를 반환합니다.

  • class 상속
    • subclass에만 있는 메소드는 superclass에서 사용❌
    • superclass에서 정의된 메소드 subclass에서 재정의⭕
    • superclass의 속성을 쓰고 싶으면 따로 정의를 내려줘야함.
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()
  • 파이썬 함수와 클래스에 대해서 설명할 수 있고, 노트 예제를 재현할 수 있다.
    • 함수 : 하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 프로그램 코드의 집합

    • 클래스 : 객체지향프로그래밍(OOP)에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀.

  • 객체지향언어에 대해서 파이썬의 클래스와 연관 지어 설명할 수 있다.

🔝 Level 2 : 예제 코드를 해석하고 응용할 수 있으며 과제를 수행할 수 있다.

  • 파이썬 함수와 클래스의 작동방식을 이해하여 코드에 적용할 수 있고, 데코레이터에 대해서 설명할 수 있다.
  • Parameter와 Argument를 구별하여 설명할 수 있고, 적절하게 활용할 수 있다.
  • pdb 의 작동방식을 알고, 주어진 코드의 상황을 pdb 를 이용해서 탐색할 수 있다.

🔥 Level 3 : Lecture Note 에 있는 주요 개념과 코드를 연결하여 설명할 수 있으며 도전 과제를 수행할 수 있다.

  • 파이썬의 클래스, 함수, 데코레이터를 활용하여 이전에 작성한 자신의 코드에 적용할 수 있다.
  • Mutable 변수와 Immutable 변수를 구분할 수 있고, 해당 특성을 활용하여 코드를 작성할 수 있다.

🚀 Level 4 : Lecture Note 에 있는 개념 중 자신이 모르는 것을 구분해 낼 수 있으며 스스로 목표를 세우고 추가 학습을 진행할 수 있다.

  • 디스크립터와 제너레이터를 활용하여 코드를 작성할 수 있다.
  • 추상화에 대해 파이썬 코드 예제를 활용하여 설명할 수 있다.
  • 단위 테스트와 TDD에 대해 설명할 수 있다.
  • 일반적인 디자인 패턴에 대해 이해할 수 있다.
profile
완료주의

0개의 댓글