본문 바로가기
Language/Python

객체 생성 시, 패러미터 검사

by Wikinist 2023. 7. 20.

파이썬에서 객체를 생성할 때, 생성자(__init__ 메서드)의 파라미터 타입을 검사하여 타입이 일치하지 않는 경우 객체 생성을 막을 수 있습니다. 이를 위해 다음과 같은 방법을 활용할 수 있습니다.

타입 어노테이션(Type Annotation) 활용

파이썬 3.5 이상에서는 타입 어노테이션을 사용하여 파라미터의 타입을 명시할 수 있습니다.
typing 모듈을 활용하여 타입을 정의하고, isinstance() 함수를 사용하여 타입을 확인할 수 있습니다.

from typing import Optional

class MyClass:
    def __init__(self, param1: str, param2: Optional[int]):
        if not isinstance(param1, str) or not isinstance(param2, int):
            raise TypeError("Invalid parameter types.")
        
        self.param1 = param1
        self.param2 = param2

위의 예시에서 MyClass의 생성자(__init__)에서 param1은 str 타입이어야 하고, param2는 int 타입 또는 None일 수 있는 타입으로 정의되어 있습니다. 타입을 확인하기 위해 isinstance() 함수를 사용하고, 타입이 일치하지 않으면 TypeError를 발생시켜 객체 생성을 막을 수 있습니다.

타입 체크 데코레이터 활용

데코레이터를 사용하여 생성자를 감싸고, 타입 체크를 수행하는 함수를 정의할 수 있습니다.

from typing import Optional

def validate_type(func):
    def wrapper(*args, **kwargs):
        if not isinstance(args[1], str) or not isinstance(kwargs.get('param2'), int):
            raise TypeError("Invalid parameter types.")
        return func(*args, **kwargs)
    return wrapper

class MyClass:
    @validate_type
    def __init__(self, param1: str, param2: Optional[int]):
        self.param1 = param1
        self.param2 = param2

위의 예시에서 validate_type 데코레이터를 사용하여 생성자를 감싸고, 타입 체크를 수행하는 wrapper 함수를 정의합니다. 타입이 일치하지 않으면 TypeError를 발생시켜 객체 생성을 막을 수 있습니다.

위의 방법들은 객체 생성 시 타입 검사를 수행하여 타입이 일치하지 않는 경우 객체 생성을 막는 기능을 구현하는 예시입니다. 이를 활용하여 파라미터의 타입을 검사하고, 타입이 일치하지 않는 경우 예외를 발생시키거나 적절한 조치를 취할 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Language > Python' 카테고리의 다른 글

Log handler  (0) 2023.07.20
파이썬 로그 설정  (0) 2023.07.20
클래스 변수 선언 시 _와 __의 차이  (0) 2023.07.19
DTO  (0) 2023.07.19
[2023-07-06] 파이썬 강의 내용 정리  (0) 2023.07.06