• 공부한 날짜: 2021.11.26

 

  • 메타클래스: 클래스를 만드는 어떤 것
  • Keyword: Class of Class, Type, Meta Class, Custom Meta Class

1.  클래스를 만드는 역할 -> 의도하는 방향으로 클래스를 커스텀

2. 프레임워크 작성 시 필수

3. 동적생성(Type), 커스텀 생성(Type) 함수

4. 커스텀 클래스 -> 검증클래스 등

5. 엄격한 class 사용 요구, 메소드 오버라이드 요구 

 

+python에서는 class가 object로 여겨진다+

 

Part 01: Type(Class)

  • Ex1)
  • Obj1 -> SampleA instance
  • SampleA -> type meta class
  • type -> type meta class

 

-클래스 특징: 변수에 할당 가능, 복사 가능, 새로운 속성, 함수의 인자로 넘기기 가능 

 

  • 인스턴스 클래스 출력 

 

  • 모든 클래스의 메타 클래스는 !type클래스!

 

  • Ex2)
  • 변수,딕셔너리,클래스 선언, 인스턴스 초기화 

 

Part 02

 

  • Keyword: Type(name,base,dict), Dynamic metaclass
  • 메타 클래스 : 메타클래스 동적 생성 중요/ 동작 생성한 메타클래스 -> 커스텀 메타클래스 생성 / 의도하는 방향으로 직접 클래스 생성                      에 관여할 수 있는 큰 장점 

 

  • Ex #1

 

  • class 동적 생성 방법: type( '클래스명', 'bases(이건 잘 모르겠음), dict(딕셔너리 입력))

 

  • Ex2: type 동적 클래스 생성 +메소드 
  • 외부에서 메소드 선언해서 동적 클래스 생성에 사용하기 

 

  • 동적 클래스 생성시 lambda로 익명함수 생성하기. 위와 동작방식은 동일함 

 

Part 03: MetaClass Inheritance

 

  • Keyword: Type Inheritance, Custom metaclass
  • 메타클래스 상속

1. type class 상속

2. metaclass 속성 사용

3. 커스텀 메타 클래스 생성(클래스 생성 가로채기(intercept)/클래스 수정하기(modify)/수정된 클래스 반환)

 

  • Ex1: 커스텀 메타클래스 생성 예제(Type 상속 안함) / 메소드안에 self가 왜 있는지 생각해보기
  • 메소드 선언

 

  • Ex2: 커스텀 메타클래스 생성 예제(Type 상속 o)
  • 딕셔너리 value에 이전에 생성한 메소드 넣을 수 있다 
  • __new__ -> __init__ -> __call__ 순서대로 메소드 호출된다 

 

  • 클래스 동적으로 생성 

 

  • 인스턴스(?) 생성 및 출력: 출력결과 자세히 봐야할 것 같음 

 

  • 상속 확인. CustomList2, list, object

 

 

Part 04: Descriptor

 

  • Keyword : descriptor, set, get, del, property
  • 디스크립터: 클래스의 속성을 객체로 매핑해서 지정된 메소드(get,set,del,,,)로 동작하게 하는 것 

1. 객체(class)에서 서로 다른 객체를 속성값으로 가지는 것

2. Read, Write, Delete 등을 미리 정의 가능

3. data descriptor(set,del), non-data descriptor(get)

4. 읽기 전용 객체 생성 장점, 클래스를 의도하는 방향으로 생성 가능 

 

  • Ex1 : 기본적인 Descriptor 예제 

 

  • 클래스, 인스턴스 생성

 

  • Set,Get,Delete 호출 

 

  • Ex2: property 클래스 사용, descriptor 직접 구현/ 메소드 이름 자유롭게 설정할 수 있음 
  • Class Property(fget=None, fset= None, fdel= None, doc =None)

 

 

Part 05: Descriptor

 

 

  • Keyword: Descriptor vs Property, low level(descriptor) vs high level(property)
  • 디스크립터

1. 상황에 맞는 메소드 구현을 통한 객체 지향 프로그래밍 구현

2. property와 달리 reuse(재사용) 가능

3. ORM Framework 사용

 

 

  • Ex1 : 여기는 이해가 잘 안가서 나중에 다시 공부해야할 것 같다 

 

 

  • Ex2

 

 

  • 값 출력하면서 함수 확인하기 

 

  • 공부한 날짜: 2021.11.25

 

Part 01 

  • Context manager Annotation 
  • @contextlib.contextmanager, __enter__, __exit__
  • 가장 대표적인 with 구문 이해
  • Contextlib 데코레이터 사용
  • 코드가 직관적이고 예외 처리하는데 용이하다는 특징이 있다 
  • 데코레이터(@contextlib.contextmanager) 이용해서 구현

-  with open('~','w') as f: \n  f.write('~') 과 같은 내용인 것같은데 my_file_writer() 구현함으로써 달라지는 부분이 있나 궁금함

 

 

Part 02 

  • Property(1) - Underscore 
  • access modifier(접근 지정자)
  • 다양한 언더스코어 활용
  • 파이썬 접근지정자 설명 

 

  • Use underscore
  • 언더스코어 이용될 때: 1. 값 무시 2. 인터프리터  3. 네이밍(국제화, 자릿수)

 

  • 접근 지정자
  • name : public 
  • _name: protected
  • __name: private
  • 파이썬 -> Public 강제성이 없음, 약속된 규약에 따라 코딩 장려(자유도, 책임감 장려)
  • 타 클래스가 클래스 변수, 인스턴스 변수 값 쓰기 장려 안함 -> Naming Mangling
  • '__'표시가 변수명에 있으면 접근하지 않는 것이 원칙이다 

 

  • Ex2

이렇게 작성하면 private 변수를 건드리는 것도 문제이지만, 가독성이 떨어진다는 문제점이 있다.  

 

  • Ex3 : 변수를 직접 참조하거나 값을 바꾸는 것이 아닌 메소드(Getter,Setter)를 이용하는 것이 더 좋다 

 

 

Part 03 

 

  • Property(2): Getter, Setter
  • @Property

 

  • 프로퍼티(property) 사용장점

1. 파이써닉한 코드

2. 변수제약 설정

3. Getter, Setter 효과 등등(코드 일관성) 

=> 캡슐화, 유효성 검사 기능 추가 용이

=> 대체표현(속성 노출, 내부의 표현 숨기기 가능)

=> 속성의 수명 및 메모리 관리 용이

=> 디버깅 용이(런타임에서 체크가능)

=> Getter, Setter 작동에 대해 설계된 여러 라이브러리(오픈소스) 상호 운용성 증가 

 

  • Ex1

 

 

  • Ex2

 

 

Part 04 : Method Overriding

 

  • 메소드 오버라이딩: 자식 클래스가 부모 클래스의 메소드를 변경하는 것. 같은 기능 사용을 위해 반복 코딩을 하지 않아도 자동 상속되는 것을 의미한다.

 

  • 메소드 오버라이딩 효과

1. 서브(자식) 클래스에서 슈퍼(부모)클래스를 호출 후 사용 

2. 메소드 재정의 후 사용가능

3. 부모클래스의 메소드를 추상화 후 사용가능(구조적 접근)

4. 확장 가능, 다형성(다양한 방식으로 동작)

5. 가독성 증가, 오류가능성 감소, 메소드 이름 절약, 유지보수성 증가 등 

 

 

  • Ex1

 

 

  • Ex2

 

  • Ex3

 

Part 05 : Overloading, Dispatch 

 

 

  • 메소드 오버로딩 효과

1. 동일 메소드 재정의

2. 네이밍 기능 예측

3. 코드 절약, 가독성 향상

4. 메소드 파라미터 기반 호출 방식 

 

 

  • Ex1 
  • 동일 이름 메소드 사용 예제
  • 동적 타입 검사 -> 런타임에 실행(타입 에러가 실행시에 발견) 면접 대비해서 알아두기!!!

 

  • Ex2

 

 

  • Ex3

 

-@dispatch: 오버로딩을 위한 라이브러리이다. 

 

 

  • 공부한 날짜: 2021.11.24

Part 01

  • Python Variable scope : scope, global, nonlocal, locals, globals
  • 전역변수(global variable)는 주로 변하지 않는 고정 값에 사용
  • 지역변수 사용 이유: 함수 내에 로직 해결에 국한할 수 있어서
  • 지역변수 소멸주기: 함수 실행 해제 시 
  • 전역변수를 지역내에서 수정하는 것은 권장되지 않음 

 

-전역변수는 함수 내에서 이용할 수 있고, 바로 출력도 가능하다

-30으로 출력됨(함수 안에 있는 로컬변수 먼저). 다른하나는 전역변수로 출력

- 변수가 선언되기 전에 참조하면 UnboundlocalError 발생

-global 키워드 사용하면 전역변수 메소드 내에서 사용가능. 근데 자주 사용하면 안된다고 함

-global d 밑에 d=60 없어야지 더 잘 설명이 될 것 같음

 

-nonlocal n : 현재의 scope내의 지역변수가 아니고, 전역변수도 아닌 변수 n을 사용할 때 사용한다. 나는 지금 지역변수는 아닌 변수를 사용하려할 때 쓰면 된다. ( 출처: https://juhi.tistory.com/6)

-print(locals()): 지역정보 전체 출력 

-print(globals()): 전역 전체 출력 

-'test_variable'=100이 gloabal()에 추가된다. 내부적으로 globals()['test_variable']=100이 내부적으로 실행된것임 

 

Part 02

  • Lambda, Reduce, Map, Filter Functions
  • lambda의 장점: 익명, 힙 영역에서 사용 즉시 소멸, 파이썬 가비지 컬렉션(count=0), 한번만 쓸 함수에 주로 사용
  • 일반함수: 재사용성 위해 메모리에 저장함
  • 시퀀스형 전처리에 Reduce, Map, Filter 주로 사용

- Lambda 함수 

-제곱수 구하는 함수 : Lambda 이용, map()이용

-짝수구하는 함수 : filter() 이용, filter+lambda

-더하기 함수: reduce() 이용

 

Part 03 

 

  • Shallow copy, Deep copy
  • 객체 복사 종류: copy, shallow copy, deep copy
  • 정확한 이해 후 사용 -> 프로그램 개발 중요(문제 발생 요소)
  • 가변: List, set, dict 
  • immutable: int,str,float,bool,unicode,,,

-Copy 종류: call by value, call by reference, call by share 

 

  • -Call by Reference: 복사한 객체 수정하면 원본 객체의 데이터도 수정된다

           a_list 와 b_list는 같은 객체 참조해서 id 동일하다 

          b_list 값 수정하면 a_list의 값도 수정된다 

 

  • Shallow Copy(얕은 복사)

얕은 복사를 하면 각자 다른 객체에다 저장하게된다 

그래서 d_list의 값을 변경해도 c_list의 값이 변경되지 않는다 

하지만 저장하는 객체는 다르지만 리스트 안의 리스트의 값은 동일하다. -> 이 리스트이 값 변경하면 둘다 변경된다. [4][1]인덱스 값 확인

 

  • Depp Copy

두 리스트가 저장된 객체가 다르다는 걸 알 수 있다 

f_list 안의 리스트를 변경해도 e_list의 값은 변경되지 않는다. 

 

Copy of Reference, shallow copy, deep copy 중에서 상황에 가장 적절한 방법을 사용하면 된다

 

Part 04

  • Context Manager : 원하는 타이밍에 정확하게 리소스를 할당, 제공, 반환하는 역할을 한다
  • Contextlib, __enter__, __exit__, exception 
  • 가장 대표적인 With 구문 이해 
  • 정확한 이해 후 사용하는 것이 프로그래밍 개발에 중요
  • __x__: 인스턴스가 초기화될때 파이썬에서 정해진 규칙대로 호출되는 형태의 메소드(매직/스페셜 메소드)

 

  • txt파일 만들고 그 안에 텍스트 입력하는 3가지 방법 

1. try~ finally로 구현하기

 

2. with ~ as 문으로 구현 

 

3. 함수 직접 만들어서 구현

 

 

Part 05 .수행시간 알아내기 

 

반복문에서 무슨 연산을 하는건지 잘 모르겠음 그냥 세는건가? 

공부한 날짜: 2021.11.18

 

  • AsyncIo 다운받기
  • BeautifulSoup 다운받기

 

  • 기본환경

 

  • AsyncIo

 

  • BeuatifulSoup

 

 

  • AsyncIO: db 작업이나 웹서비스 작업을 동시에 수행할 수 있는 고순위의 패키지. 다운이 필요함
  • 비동기 I/O Coroutine 작업
  • Generator : 반복적인 객체 Return 사용
  • Non-Blocking 비동기 처리
  • Blocking I/O : 호출된 함수가 자신의 작업이 완료될 때까지 제어권을 가지고 있음. 타 함수는 대기 
  • NonBlocking I/O : 호출된 함수가 return 후  호출한 함수(메인루틴)에 제어권 전달 -> 타 함수는 일지속

스레드 단점: 디버깅, 자원 접근시 레이스 컨디션(경쟁상태), 교착 상태(dead lock) -> 고려 후  코딩

코루틴 장점: 하나의 루틴만 실행 -> 락 관리 필요없음 -> 제어권으로 실행. 상황 고려 안해도 됨

코루틴 단점: 사용함수가 비동기로 구현이 되어있어야 하거나 직접 비동기로 구현해야 함 

 

-https로 url했다가 오류 발생 -> http로 변경 

-안되는 이유: https://seculog.tistory.com/9

 

[python] Requests 모듈을 이용하여 https 사이트 접속 에러 발생시 초간단 해결방법

Python에서 웹 크롤링을 진행할 때, Senelium을 이용하여 사이트를 접속하고 Requests를 이용하여 원하는 데이터를 가져옵니다. Requests는 HTTP 메소드를 이용하여 접속을 하는데, 주로 GET과 POST를 사용합

seculog.tistory.com

 

 

chapter07 코드 실행하면 계속 오류 발생. 뭔지 잘 모르겠음 일단 보류 

+ Recent posts