Python

[Python 고급] 1. variable scope, context Manager

noahkim_ 2021. 7. 31. 17:32

1. variable scope

  • 전역변수
    지역에서 읽을 수 있음
    지역에서의 지역변수와 전역변수의 이름이 같을 때, 전역 변수 선택 시 'global' 키워드 붙여주기

  • nonlocal 키워드
    (global 객체도 아니고 inner block의 변수도 아니므로) closer의 변수에 접근 시 선언식으로 키워드 사용하기

  • locals()
    내부필드-메서드(지역전체) 를 dict로 리턴함

  • globals()
    전역함수/변수를 dict로 리턴
    키값에 접근해 값 변경가능

2. Context Manager

원하는 타이밍에 정확하게 리소스를 할당 및 반환 해줌
파일 I/O 시에 전용 클래스로 사용함. with 문과 같이 쓰임

__enter__(self) : with 구문에 진입하는 시점에 자동으로 호출되는 메소드
__exit(self, type, value, traceback) : with구문을 빠져나오기 직전에 호출되는 메소드. close()호출 시 호출됨
  type, value, traceback는 with문을 빠져나오기 전에 예외가 발생할 시 정보를 나타냄

3. Context Manager Annotation

데코레이터로 Context Manager 이용 (@contextlib.contextmanager) 
직관적인 코딩, 에러처리 쉬움

with문에서 사용.

 

 

4. Property

  • Underscore
    인터프리터
    값 무시(unpacking시 분배할 필요없는 요소에 걸어줌)
    네이밍

    access modifier(접근지정자) -> naming mangling (개발자들간의 원칙. 강제성은 없음)
     _변수 : protected
     __변수 : private

 

5. Getter, Setter

변수에 직접 접근 후 수정시 일관성 가독성 하락

=> @Property사용. 
 

@변수.setter

@변수.deleter

 

캡슐화, 유효성검사 등 가능.

내부숨기기 가능.

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

 

6. Method Overriding

서브클래스에서 부모를 호출 후 사용 -> 상속 -> 인스턴스 생성후 적용됨

메소드를 재정의한 후 사용가능

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

다형성, 가독성

 

7. Method Overloading

메소드 파라미터 기반 동작 방식 (multiple dispatch: 오버로딩 지원. 어노테이션 사용)

동일 메서드 재정의. 네이밍 기능 예측

코드 절약 가능. 가독성 향상

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

 

동적 타입 검사 : 런타임에 실행 (타입 에러가 실행시에 발견됨)

 

@dispatch(int, int)로 사용되는 인자를 알 수 있음