728x90
반응형
편의를 위해서 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
BIG
'Programming > Python' 카테고리의 다른 글
decorator - 데커레이터 (0) | 2024.10.30 |
---|---|
docker compose - python default 컨테이너 만들기 (0) | 2023.04.05 |
try except를 깔끔하게 사용하기 - suppress (0) | 2023.01.31 |
datetime, str, timestamp 변환 (0) | 2021.01.13 |
NamedTuple 초기화 이후 수정하는 방법 (0) | 2020.12.11 |
댓글