본문 바로가기
Programming/Python

python 으로 asdict, from_dict 직접 구현

by Chan_찬 2023. 12. 18.
728x90

asdict, from_dict

편의를 위해서 dict을 많이 사용하지만 변수들이 많아지면 class화 해서 사용하는 것이 좋다.
아래 처럼 dataclass 사용시 입력값을 request의 json으로 받거나 dict으로 변환했을 때 class의 파라미터에 셋하는 from_dict 구현내용이다.
구현된 asdict 대신에 dataclasses.asdict 을 사용해도 된다. 아래의 asdict는 조건들을 추가하고 싶어서 만든 것이다.

from dataclasses import dataclass, fields

@dataclass
class AppRawData:
    sessionId: str = ""
    deviceId: str = ""
    uuid: str = ""
    view_url: str = ""
    event_name: str = ""
    event_value: str = ""
    device: str = ""
    d_vendor: str = ""
    os_version: str = ""
    app_version: str = ""
    occur_date: str = "NULL"
    created: str = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
    event: list = field(default_factory=list)
    view: list = field(default_factory=list)
    attribute: dict = field(default_factory=dict)

    @classmethod
    def from_dict(cls, kwargs: dict):
        """dict타입 아규먼트로 받아서 해당 클래스의 파라미터 초기화."""
        return cls(**{k: v for k, v in kwargs.items() if k in set(f.name for f in fields(cls))})

    def asdict(self) -> dict:
        """클래스의 None이 아닌 파라미터를 dict으로 반환."""
        return {k: v for k, v in self.__dict__.items() if v is not None}
728x90
728x90
Buy me a coffeeBuy me a coffee

댓글