배움 기록/Programming

[python] Dataclasses 모듈은 무엇인가 , 장점은? (feat. **kwargs)

Spezi 2023. 4. 4. 00:19
반응형

Dataclasses 는 말 그대로 data 를 담는 클래스다. 이 모듈을 사용했을때 어떤 장점이 있는지 알아보자.
 

Dataclasses 모듈 사용하는 법

아래와 같이 모듈을 import하고 @dataclass 데코레이터를 클래스 위에 써준다.
 

from dataclasses import dataclass


@dataclass
class Friends:
    name: str
    age: int
    goodfriends: bool = True

 

Dataclasses 모듈의 장점

  • 위의 코드에서 보는 것처럼 default 값을 설정해 줄 수 있다. goodfrineds의 디폴트 값을 True로 설정한 것처럼.
  • 간단하게 class 를 작성할 수 있다. 기존에 쓰던 def __init__, self 이런거 없이 간단함
  • 데이터 값을 쉽게 바꿔줄 수 있다. 이 예로 아래 코드를 한번 보자.

더 자세한 장점과 예시는 여기서 더 다루어보았다.

 

2024.02.25 - [배움 기록/Programming] - [python, dataclass] 데이터 클래스의 장점

 

[dataclass] 데이터 클래스의 장점

우리는 여러가지 방법을 이용해 데이터를 담을 수 있다. 그냥 list, dict을 통해 데이터를 저장하는 것과 비교해, 데이터 클래스를 통해 데이터를 담아두면 어떤 장점이 있을까? 1. 일단, 타입힌트

jedemanfangwohnteinzauberinne.tistory.com


Friends 객체의 값을 dictionary에 저장된 값으로 변형하고 싶다고 할때, dataclasses 모듈을 사용하지 않으면 아래와 같은 코드를 이용해 값을 바꿔줄 수 있다.
 

friends_dict = {'name': 'Kim', 'age': 17, 'goodfriends': True}

Kim = Friends()
    for key, value in friends_dict.items():
        setattr(Kim, key, value)

 
하지만 Dataclasses 모듈을 사용하면 아래의 코드처럼 한줄로 쉽게 객체 값을 바꿔 줄 수 있다.

Kim = Friends(**friends_dict)

 

**kwargs 는 무엇이며 사용 목적은 무엇인가

참고로 ** 이 붙는 것은 **kwargs 로부터 온것인데, kwargs는  "keyword arguments" 를 의미한다.
**kwargs는 dictionary 형을 unpack하기 위해 사용할 수 있다.
 
아래 코드는 같은 데이터 값을 Friends라는 객체에 저장한다.
즉, **을 붙임으로써 사전형 데이터를 unpack해서 객체에 사용함을 알 수 있다.
 

# Friends(**friends_dict)
Friends(**{'name': 'Kim', 'age': 17, 'goodfriends': True})

# 이 둘은 같은 데이터를 Friends라는 객체에 저장한다

Friends(name='Kim', age=17, goodfriends=True)

 
 

 

 

 


배움을 기록하기 위한 공간입니다. 

수정이 필요한 내용이나 공유하고 싶은 것이 있다면 언제든 댓글로 남겨주시면 환영입니다 :D


 

반응형