1.TypeChecker

함수에 넣을때 들어가는 파라미터가 지정해둔 정수형으로 들어가는지 체크함

아니면 바로 에러구문 표시

from inspect import getfullargspec


def type_checker(default=None):
    def get_decorator(decorated):
        spec = getfullargspec(decorated)
        argNames = spec.args
        annotations = spec.annotations

        def decorator(*args, **kwargs):
            for idx, val in enumerate(args):
                argName = argNames[idx]
                if (argName in annotations and type(val) is not annotations[argName]):
                    return default
            for key, val in kwargs.items():
                if (key in annotations and type(val) is not annotations[key]):
                    return default

            return decorated(*args, **kwargs)

        return decorator

    return get_decorator

데코레이터를 활용해서 이렇게 구현했음

@type_checker(((1, "잘못된 데이터"), None))
def send_message_api(session, phone_number: str):

이건 예시

 

2. Import All

파이썬에서 폴더를 모듈화 시키고 안에 있는 모든 함수들을 import할때 사용하려고 했음

from .operation import *
from .operation import 변수
from .operation import 함수
from .operation import 클래스

주로 이렇게 사용한다.

 

하지만 testing 폴더에 __init__.py를 생성하고

from .operation import *    # 현재 패키지의 operation 모듈에서 모든 변수, 함수, 클래스를 가져옴
from .geometry import *     # 현재 패키지의 geometry 모듈에서 모든 변수, 함수, 클래스를 가져옴

이렇게 작성해준다.

 

그럼 이제 다른 곳에서는 

import testing    # testing 패키지만 가져옴
 
print(testing.add(10, 20))   # 패키지.함수 형식으로 operation 모듈의 add 함수 사용
print(testing.mul(10, 20))   # 패키지.함수 형식으로 operation 모듈의 mul 함수 사용
 
print(testing.triangle_area(30, 40)) # 패키지.함수 형식으로 geometry 모듈의 triangle_area 함수 사용
print(testing.rectangle_area(30, 40))# 패키지.함수 형식으로 geometry 모듈의 rectangle_area 함수 사용

이렇게 testing만 import해서 하위에 있는 모든 것들을 import 가능함

 

그리고 __init__.py에서 

__all__ = ['add', 'triangle_area']    # calcpkg 패키지에서 add, triangle_area 함수만 공개

이렇게 해주면 모든 것을 공개하는게 아니라 add와 triangle_area만 공개할 수 있음

 

 

참고 : https://dojang.io/mod/page/view.php?id=2450 

 

파이썬 코딩 도장: 45.4 패키지에서 from import 응용하기

지금까지 calcpkg 패키지의 모듈을 가져올 때 import calcpkg.operation처럼 import 패키지.모듈 형식으로 가져왔습니다. 그러면 import calcpkg처럼 import 패키지 형식으로 패키지만 가져와서 모듈을 사용할 수

dojang.io

https://umbum.dev/176

 

[python] import 관련 : 모듈, 패키지, __init__.py, __all__

모듈을 싱글턴 처럼 쓸 수는 있지만 이렇게 쓰는건 별로다. 파이썬 모듈은 참조된 횟수에 상관없이 단 하나의 복사본만 불러온다. 따라서 모듈 자체를 하나의 싱글턴으로 사용할 수 있다. 그래

umbum.dev

https://nesoy.github.io/articles/2018-07/Python-init-all

 

Python의 __init__, __all__ 란?

 

nesoy.github.io

 

+ Recent posts